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

Aid*_*hjj 4 c++

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

给出编译错误

“错误:将‘const Test’作为‘this’参数传递会丢弃限定符”

?

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

Vio*_*ffe 7

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

void Test::print() const {
   cout << a << b << c;
}
Run Code Online (Sandbox Code Playgroud)

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


Som*_*ken 5

const void print()
Run Code Online (Sandbox Code Playgroud)

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

void print() const
Run Code Online (Sandbox Code Playgroud)

  • 紫色的可以。总是可以。有人编辑维基! (4认同)
  • 很酷的用户名,兄弟:) (3认同)
  • @VioletGiraffe 最后我抬头一看,长颈鹿不会说话。 (3认同)