Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我在头文件中有一个带有关键字的声明,我应该在定义本身中包含相同的关键字吗? 我是C++新手,虽然有少量编程经验,但想知道是否有关于定义中包含关键词的全局一致性。_C++ - Fatal编程技术网

如果我在头文件中有一个带有关键字的声明,我应该在定义本身中包含相同的关键字吗? 我是C++新手,虽然有少量编程经验,但想知道是否有关于定义中包含关键词的全局一致性。

如果我在头文件中有一个带有关键字的声明,我应该在定义本身中包含相同的关键字吗? 我是C++新手,虽然有少量编程经验,但想知道是否有关于定义中包含关键词的全局一致性。,c++,C++,例如(不是有效的语句,但例如): 为了清楚起见,一般建议在定义中也这样做,还是我应该不使用它们 Dog::foo() const override final foo bar ... keywords { // } 如果包含在声明中,定义中是否必须包含任何关键字?答案取决于特定关键字 正如StoryTeller在注释中指出的那样,const是函数签名的一部分。带有const的声明和没有声明两个不同函数的声明(重载解析将确定在给定表达式中使用哪个声明)。这同样适用于volatile。因此

例如(不是有效的语句,但例如):

为了清楚起见,一般建议在定义中也这样做,还是我应该不使用它们

Dog::foo() const override final foo bar ... keywords {
    //
}

如果包含在声明中,定义中是否必须包含任何关键字?

答案取决于特定关键字

正如StoryTeller在注释中指出的那样,
const
是函数签名的一部分。带有
const
的声明和没有声明两个不同函数的声明(重载解析将确定在给定表达式中使用哪个声明)。这同样适用于
volatile
。因此,您必须在定义中使用它,以便声明和定义可以匹配

virtual
不得在成员定义中使用,这同样适用于
override
final
。这些关键字不会影响函数签名


所以,没有必要达成共识,因为这不是主观的。有两条硬性规定,这两条规定有一个原因

取决于关键字。如果省略
const
,则不是定义与声明相同的函数。更不用说在类外定义中不允许使用其他定义。非常感谢。我没有意识到这一点。这是唯一的例外吗?我会看一看书中的线索,但发现它们对我来说要么太初级,要么太高级(定义必须包含足够的信息(类名、函数名、返回类型、参数类型、
const
限定符、异常规范等)因此定义与声明匹配。请注意,
final
是一个标识符,而不是一个关键字。除此之外,您的问题还不清楚。@Peter-标识符?您确定没有键入错误吗?@Peter我想这就是我的问题的来源:定义中有多少信息足以匹配函数签名。
Dog::foo() const override final foo bar ... keywords {
    //
}