C++ 调用带或不带“的函数”;常数;C+格式签名+;
我猜对于const对象,它会查找const函数。否则是可变函数。但为什么最后一个是可变的 但为什么最后一个是可变的 将C++ 调用带或不带“的函数”;常数;C+格式签名+;,c++,constants,C++,Constants,我猜对于const对象,它会查找const函数。否则是可变函数。但为什么最后一个是可变的 但为什么最后一个是可变的 将pobj1声明为指向非const对象的const指针。对象仍然是可变的,但指针不是可变的 初始化变量后,您将无法将其更改为指向另一个变量 Object*const pobj1 = &obj1; 但是您仍然可以更改它指向的变量,并通过指针调用类的非const成员函数 pobj1 = &obj2; // Not OK. 但为什么最后一个是可变的 这是因为声明
pobj1
声明为指向非const
对象的const
指针。对象仍然是可变的,但指针不是可变的
初始化变量后,您将无法将其更改为指向另一个变量
Object*const pobj1 = &obj1;
但是您仍然可以更改它指向的变量,并通过指针调用类的非const
成员函数
pobj1 = &obj2; // Not OK.
但为什么最后一个是可变的
这是因为声明是Object*constpobj1
。因为我们使用的是指针,所以有两种常量的可能性
*pobj1 = obj2; // OK
我相信你的意思是“const Object*”。“const”可以应用于指针和/或指针指向的对象。扭曲之处在于“Object*const”与“Object const*”相同
const Object* const pobj1 OR Object const * const pobj1
^^1^^ ^^2^^ ^^1^^ ^^2^^
// 1 applies to the types (i.e., Object)
// 2, which is what you're using applies to the pointer, therefore you're using a non-const Object
将pobj1声明为指向非常量对象的常量指针。如果你对此表示怀疑,
把它改成
Object*const pobj1 = &obj1;
这将无法编译,因为它丢弃了obj2的常量限定符
顺便说一句,限制是对于const对象,它只能使用const函数括号后的const表示“this*”指针将被视为指向方法中const对象的指针
对于非常量对象,它可以同时使用常量和非常量方法,但它会选择首先使用非常量(如果两者都已定义)。
pobj1
是指向非常量对象的常量指针。指针本身不能修改(不能指向其他对象),但它指向的对象可以修改,因此调用非常量重载。请注意,对象常量
与对象常量*
对象常量*
与常量对象*
的类型不同
const Object* const pobj1 OR Object const * const pobj1
^^1^^ ^^2^^ ^^1^^ ^^2^^
// 1 applies to the types (i.e., Object)
// 2, which is what you're using applies to the pointer, therefore you're using a non-const Object
Object*const pobj1 = &obj1;
Object*const pobj2 = &obj2;