函数末尾加const &
时间: 2023-06-20 10:07:56 浏览: 132
在C++中,函数末尾加上const &表示该函数不会改变它所引用的对象的状态,并且使用引用而不是复制对象本身以提高效率。这通常用于参数或成员函数中,以确保它们不会修改对象的状态。例如:
```c++
class MyClass {
public:
int getValue() const; // const成员函数,不能修改对象的状态
void setValue(int value); // 非const成员函数,可以修改对象的状态
private:
int m_value;
};
int MyClass::getValue() const {
return m_value;
}
void MyClass::setValue(int value) {
m_value = value;
}
void doSomething(const MyClass& obj) {
int value = obj.getValue(); // 可以调用const成员函数
//obj.setValue(10); // 错误,不能调用非const成员函数
}
```
在上面的例子中,doSomething函数使用const引用作为参数,以确保它不会修改传递给它的MyClass对象的状态。它可以调用getValue()成员函数,因为它是const成员函数,而不能调用setValue()成员函数,因为它是非const成员函数。
相关问题
函数末尾加上const提示没有this指针的合法转换
这个问题的原因可能是你在类的成员函数中使用了const关键字来修饰该函数,这表明该函数不会修改类的成员变量,因此编译器会把this指针看作一个指向常量的指针,这样在函数体内就不能修改this指针所指向的对象了。如果你在函数体内尝试修改类的成员变量,编译器就会给出这样的提示。
需要注意的是,如果你希望在成员函数中修改类的某些成员变量,就不能使用const关键字来修饰该函数。
函数末尾加上const,调用某函数时提示没有this指针的合法转换
这个问题可能是因为你在调用该函数时,使用了一个指向常量对象的指针或引用,而该函数又没有被声明为const成员函数,导致编译器无法进行this指针的合法转换。
在C++中,如果一个函数被声明为const成员函数,那么它就承诺不会修改类的成员变量,因此可以被一个指向常量对象的指针或引用调用。但是如果函数没有被声明为const成员函数,那么就不能被一个指向常量对象的指针或引用调用,因为这会导致编译器无法进行this指针的合法转换。
如果你确定该函数不会修改类的成员变量,那么可以将该函数声明为const成员函数。如果该函数确实需要修改类的成员变量,那么就需要使用一个非常量的指针或引用来调用该函数。
阅读全文