gpt4 book ai didi

c++ - 有人可以告诉为什么在成员函数 : `Base::fool(T1 *pub, T2 *info){ (void)pub; (void)info;}` 的定义中使用此类代码的原因

转载 作者:行者123 更新时间:2023-12-01 14:39:16 26 4
gpt4 key购买 nike

下面提供了相关的程序代码。我经常在开源项目中看到这样的代码,可以在Linux和Windows上运行。有人告诉我,这是为了避免编译警告。真的是这样吗?

class Base
{
public:
virtual void on_publication_matched(Publisher* pub, PublicationMatchedStatus& info)
{
(void)pub;
(void)info;
}
};

我想知道为什么不这样定义它:
class Base
{
public:
virtual void on_publication_matched(Publisher* pub, PublicationMatchedStatus& info){};
};

或者
class Base
{
public:
virtual void on_publication_matched(Publisher* pub, PublicationMatchedStatus& info) = 0;
};

最佳答案

让我们看看前两个例子。他们定义了一个什么都不做的函数。区别在于空投

(void)pub;
(void)info;

这通常用于避免 unused-variable编译器发出的警告。它会转换为 void .该表达式随后被丢弃,因此非常有效,例如 (void)pub什么都不做,但编译器不会提示未使用的变量。从 c++17 开始,您可以使用 maybe unused属性:
virtual void on_publication_matched([[maybe unused]]Publisher* pub, 
[[maybe unused]]PublicationMatchedStatus& info){}

或者,您也可以编写:
virtual void on_publication_matched(Publisher*,PublicationMatchedStatus&){}

这也不会发出警告。但是,我更喜欢描述性的参数名称。正如@JaMiT 所说,您可以使用内联注释来获取:
virtual void on_publication_matched(Publisher*/*pub*/,
PublicationMatchedStatus& /*info*/){}

您的最后一个示例将该功能标记为纯虚拟功能,这与第一个示例大不相同。那就是您不能创建纯虚拟类的实例。您需要在派生类中提供一个实现来创建它的实例。另请参阅 answer .

关于c++ - 有人可以告诉为什么在成员函数 : `Base::fool(T1 *pub, T2 *info){ (void)pub; (void)info;}` 的定义中使用此类代码的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62255274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com