错误:将"xxx"作为"this"参数传递会丢弃限定符

error: passing 'xxx' as 'this' argument discards qualifiers

本文关键字:this xxx 作为 错误 参数传递      更新时间:2023-10-16

谁能告诉我为什么下面的代码:

#include <iostream>
using namespace std;
class Test {
    int a, b, c;
public:
    Test() : a(1), b(2), c(3) {}
    const void print() {cout << a << b << c;}
    int sum() {return (a+b+c);}
};
const Test& f(const Test& test) {
    test.print();
    // cout << test.sum();
    return test;
}
main() {
    Test x;
    cout << "2: ";
    y = f(x);
    cout << endl;
}

给出编译错误

"错误:将'const Test'作为'this'参数传递时会丢弃限定符"

?

我的print()方法是const,这是我所理解的所有必要的。对我来说,f()中的(注释掉的)sum()方法应该给出一个错误,而不是print()方法。如果有人能指出我误解的地方,那就太好了。

您正在const对象上调用非const方法print()const方法不能修改它所调用的对象,这是唯一允许在const对象上调用的成员方法(以保持const-ness)。const方法在方法参数列表之后用const 表示:

void print() const {cout << a << b << c;}

是的,const void充其量是没用的,只有void是一样的。

const void print()

这没有意义,你的意思是:

void print() const