可能听起来很蠢,在C++prime第五版P258中,它说:
默认情况下,this的类型是指向类类型的非const版本的const指针。例如,默认情况下,在Sales_data成员函数中,this的类型是Sales_data * const。
我可以理解this*是一个const指针,这意味着一旦初始化指向的对象不能更改。但随后又说:
尽管this是隐式的,但它遵循正常的初始化规则,这意味着(默认情况下)我们不能将this绑定到一个const对象上。
但是我编写了以下代码,它仍然可以正常编译:
```cpp class Sales_data { public: bool is_same(const Sales_data &rhs) const { return this == &rhs; } }; ```class Test{
public:
Test() = default;
Test(const string &s): teststr(" ") {};
Test(int a) : testint(a) {};
Test(const string &s, int a): teststr(s), testint(a) {};
string getstr() const { return teststr; };
int getint() { return testint; }; //there is no const here
private:
string teststr;
int testint = 0;
};
int main(){
Test a("abc",2);
cout << a.getint() << " ";
cout << a.getstr() << endl;
cout << endl;
return 0;
}
所以我的问题是:如果编译器可以正常编译它,无论有没有'const',那为什么这很重要呢?然后书上说:毕竟,isbn的主体没有改变指向该对象的内容,所以如果这是一个指向const的指针,我们的函数将更具灵活性。我想知道灵活性是什么? 你能给我举些例子吗?
this
不是一个“const指针”,而是一个关键字,当被评估时会产生适当指针类型的prvalue值。由于它是一个prvalue,你无法修改它,就像你不能说(1+2)=3
一样。 - Kerrek SBmain()
的第一行改为const Test a("abc",2);
,你会发现你不能再调用getint()
了,但是你仍然可以继续调用getstr()
。不改变对象的方法应该声明为const
,因为这样它们可以在给定一个const
对象(或引用/指向const
对象的指针)时使用。 - cdhowiethis*
,但这不是正确的写法。请使用纯粹的this
。 - Kate Gregory