第二个声明foo:B()的真正 const 是什么意思?
int foo::A() const {
return m_var;
}
int const foo::B() {
return m_var;
}
对于第一个声明,我肯定知道它“保护”了成员变量,即m_var。
但是第二个声明的全部含义是什么,它只是向调用者返回一个常量int,可能是非常量变量?我的意思是出于任何原因这都有意义吗?
答案 0 :(得分:1)
情况1:函数签名后的const
表示该函数不会更改对象。因此,您可以在const
对象上使用它(或使用指向const
或const
引用的指针)。
情况2:函数名称前的const
确实与返回类型有关。您是完全正确的:实际上,它不会更改对象的任何内容,因为返回值是在此代码段中按值完成的,并且此值处于无法更改的温度(例如++
或{{ 1}}仍然无效,因为没有左值)。
情况3:返回类型为const或const引用的指针将更有意义。在这种情况下,将防止从外部更改对象状态。
以下是摘要:
--
案例4:(感谢HolyBlackCat指出)。对于情况2,标量没有什么区别,对于类来说完全可以理解。假设class foo {
public:
int A() const { // const function
return m_var;
}
int const B() { // non const function, but const return type
return m_var;
}
int const& C() const { // non const function, but const reference return type
return m_var;
}
private:
int m_var;
};
int main() {
const foo x{};
x.A(); // ok
//x.B(); // not ok -> function B() doesn't guarantee to leave x unchanged.
x.C(); // ok
const int& y = x.C(); // ok (y will not alter m_var.
//int& z = x.C(); // not ok since z is not const
return 0;
}
属于m_var
类:
bar
然后const返回值会有所不同:
class bar {
public:
void change_it() {}
void read_it() const {}
};