我一直在寻找一个答案,但始终找不到。假设我找到了:
class foobar{
public:
char foo() const;
};
,在我的foobar. h
当我想在foobar.cpp中实现这个类时,我应该重复const
吗?
char foobar::foo() const{
//...my code
}
或者我可以这样做(whitout的const
)
char foobar::foo() {
//...my code
}
如果这是一个副本,我很抱歉,但没有其他问题真正回答了这个问题。
6条答案
按热度按时间bjg7j2ky1#
是的,您必须在定义中包含
const
限定符。如果您编写:在实现文件中,如果您写入:
那么编译器会发出一个错误消息,指出类中没有签名为
int f ()
的函数,如果你在实现文件中也加入了const
关键字,它就会工作。可以根据对象
const
ness重载函数。例如:输出将为(如预期):
non-const foo!
const foo!
正如我们对
const
所做的那样,您也可以基于对象volatile
ness重载函数。v9tzhpje2#
您绝对 * 必须 * 在实现中包含
const
限定符。可以根据
const
属性重载函数,实际上这是语言的一个重要部分。41zrol4v3#
是的,因为
const
是签名的一部分。您可以定义两个成员函数,它们的区别仅在于const
-ness。最简单的方法是用你最喜欢的编译器测试你的代码--下面的代码不会被编译:
您应该会收到类似以下内容的错误:
错误:
'char foobar::foo()'
的原型与类'foobar'
中的任何原型都不匹配Demo.
7y4bm7vi4#
是的,你应该重复
const
,它是函数签名的一部分。也可以有另一个声明和实现而不使用const
修饰符。eqfvzcg85#
如果你的变量是
char foo() const;
,并且你想实现它,你必须把它命名为你声明的那样。char foobar::foo();
与char foobar::foo() const;
不同,这意味着您可以在类声明中同时使用它们,如下所示:gdrx4gfi6#
是的,在
foobar.cpp
文件中必须需要const
限定符。当你在方法签名中使用const时,你是在告诉编译器this
指向的内存不能被这个方法改变(这里是foobar
)。