问题是从. const_ _test2.test()consttest2testing::test1
testing::test1获取test2作为参数const testing &test2。所以在testing::test1, test2const. 然后在函数的第一行:
test2.test()
该testing::test函数在 上调用test2。该函数没有const在签名结束时声明,因此它可能会修改调用它的对象(this隐式传递给它的指针),即使它没有,编译器也会假设。通过让您在那里调用它,编译器将允许您在const没有显式转换的情况下修改变量,这是 C++ 不应该允许的。 因此解释错误信息:
test.cpp:15: error: passing ‘const testing’ as ‘this’ argument of ‘int testing::test()’ discards qualifiers
this引用成员函数 ( testing::test) 操作的对象,在这种情况下它不是const,因为testing::test没有用 声明const,因此在尝试使非const指针 ( this) 引用const对象 ( testing) 时检测到不匹配,忽略const 限定符。_
为了解决这个问题,决定testing::test函数是否需要修改它被调用的对象(它现在的编写方式不需要,因为它所做的只是return 1,但是可能会改变,所以你需要考虑它的意图功能是)。如果应该,那么显然在const对象上调用它是不好的,尽管您可以使用const_cast要求编译器覆盖它,但这很危险。如果不应该,则标记它const,以便它也可以在const对象上调用:
class testing{
int test1() const;
// ...
}
int testing::test() const {
// ...
}