【发布时间】:2014-06-28 19:35:43
【问题描述】:
考虑以下代码sn-p:
class MyClass {
int x;
public:
MyClass(int val) : x(val) {}
const int& get() const {return x;}
};
void print (const MyClass& arg) {
cout << arg.get() << '\n';
}
int main() {
MyClass foo (10);
print(foo);
return 0;
}
无论我是否在 MyClass 的实例化之前添加const 修饰符,程序都会成功编译(没有任何警告)并打印10。为什么print 可以接受非const 参数?或者换句话说,函数参数中const修饰符的作用是什么?为什么函数的形参和实参可以有不同的类型(或修饰符)?
我在 Ubuntu 14.04 上使用-Wall -std=c++11 尝试了 GCC (4.8.2) 和 Clang (3.4),结果相同(没有错误/警告)。我还搜索了“c++ const object function”,但没有得到任何看起来有希望的东西。
【问题讨论】:
-
为什么它不应该接受非常量参数?可以不更改非常量对象。