C++ 如果在C+中有两个名称相同的方法,一个标记为const,另一个不标记为const,那么如何解析方法调用+;? void testMethod(){ cout
如果通过引用C++ 如果在C+中有两个名称相同的方法,一个标记为const,另一个不标记为const,那么如何解析方法调用+;? void testMethod(){ cout,c++,methods,constants,C++,Methods,Constants,如果通过引用const或指向const的指针调用成员函数,或者直接在类型为const-限定的对象上调用成员函数,则将选择限定为const的重载。否则,将选择未限定为const的重载 void testMethod(){ cout<<"Normal Method"; } void testMethod() const{ cout<<"Const Method"; } 在更正式的术语中,C++11标准第9.3.2/3段规定(在引号中,cv代表const-或-
const
或指向const
的指针调用成员函数,或者直接在类型为const
-限定的对象上调用成员函数,则将选择限定为const
的重载。否则,将选择未限定为const
的重载
void testMethod(){
cout<<"Normal Method";
}
void testMethod() const{
cout<<"Const Method";
}
在更正式的术语中,C++11标准第9.3.2/3段规定(在引号中,cv
代表const
-或-volatile
,出于提问的目的,您可以忽略volatile
部分):
仅当对象表达式(5.2.5)为
作为cv限定值或小于成员函数的cv限定值[…]
如果在
const
对象上调用它,就会得到const
版本,const
或多或少地对应于const ClassName*const this
第一个参数,而不是ClassName*const this
。@chris:如果将const
始终放在对象它符合条件。也就是说:ClassName const*const this
vsClassName*const this
@MatthieuM.,没错,我通常只喜欢它放在左边,因为这是我习惯的,我的大脑在从左到右阅读它并把东西放在适当的位置上做得相当好(同样,因为我习惯于这样)。对于不习惯的人,我同意。早点开始很好。谢谢安迪。这很有帮助。@user2425443:很高兴你发现它很有帮助
X x;
x.testMethod(); // Calls the non-const version
X const& y = x;
y.testMethod(); // Calls the const version
X* z = &x;
z->testMethod(); // Calls the non-const version
X const w;
w.textMethod(); // Calls the const version