返回数据类型的函数const含义

时间:2018-11-18 09:16:51

标签: c++ function const class-design

第二个声明foo:B()的真正 const 是什么意思?

int foo::A() const {
    return m_var; 
}


int const foo::B() {
    return m_var; 
}

对于第一个声明,我肯定知道它“保护”了成员变量,即m_var。

但是第二个声明的全部含义是什么,它只是向调用者返回一个常量int,可能是非常量变量?我的意思是出于任何原因这都有意义吗?

1 个答案:

答案 0 :(得分:1)

情况1:函数签名后的const表示该函数不会更改对象。因此,您可以在const对象上使用它(或使用指向constconst引用的指针)。

情况2:函数名称前的const确实与返回类型有关。您是完全正确的:实际上,它不会更改对象的任何内容,因为返回值是在此代码段中按值完成的,并且此值处于无法更改的温度(例如++或{{ 1}}仍然无效,因为没有左值)。

情况3:返回类型为const或const引用的指针将更有意义。在这种情况下,将防止从外部更改对象状态。

以下是摘要:

--

online demo

案例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 {} 
}; 

online demo