const before parameter vs const after function name c++
这样的事情之间有什么区别
1 | friend Circle copy(const Circle &); |
和这样的事情
1 | friend Circle copy(Circle&) const; |
我知道const后,函数被用来告诉编译器这个函数不会尝试更改它被调用的对象,那么另一个呢?
第一种形式意味着绑定到作为
另一方面,第二种形式是非法的:只有成员函数可以
当
用代码说出来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | struct X { void foo() const // <== The implicit"this" pointer is const-qualified! { _x = 42; // ERROR! The"this" pointer is implicitly const _y = 42; // OK (_y is mutable) } void bar(X& obj) const // <== The implicit"this" pointer is const-qualified! { obj._x = 42; // OK! obj is a reference to non-const _x = 42; // ERROR! The"this" pointer is implicitly const } void bar(X const& obj) // <== The implicit"this" pointer is NOT const-qualified! { obj._x = 42; // ERROR! obj is a reference to const obj._y = 42; // OK! obj is a reference to const, but _y is mutable _x = 42; // OK! The"this" pointer is implicitly non-const } int _x; mutable int _y; }; |
C ++类方法有一个隐含的
1 2 | class C { void f(int x); |
你可以想象看起来真的像这样:
1 | void f(C* this, int x); |
现在,如果你这样声明:
1 | void f(int x) const; |
就像你写的那样:
1 | void f(const C* this, int x); |
也就是说,尾部
使函数
使成员函数const意味着它不能调用任何非const成员函数,也不能更改任何成员变量。它还意味着可以通过类的const对象调用该函数。
这个必须是'Circle'类的成员函数。
1 | Circle copy(const Circle &); |
而这一个意味着传递的参数不能在函数内改变。这个可能是也可能不是会员功能。
一个参数是函数的另一个参数。
1 | Circle copy(const Circle &); |
这意味着传入的参数不能在函数内更改
1 | Circle copy(Circle&) const; |
从右向左阅读
如果我们将第一个函数重写为
需要在您的示例中删除朋友
圆形副本(Circle&amp;)const;
//无法更改名为Constant成员函数的此poniter值
1 | friend Circle copy(const Circle &); |
函数调用期间不会更改参数的值。
1 | friend Circle copy(const Circle &)const ; |
该函数是一个访问器,不会更改任何类成员的值。通常,有一些类型的函数:访问器和增变器。
访问者:检查但不更改其对象的状态。