在Y::test1()
中,非常数X::operator void*()
优先于看似更好的匹配,X::operator bool() const
-为什么?标准中对这种现象的描述在哪里?
#include <iostream>
struct X {
operator void*() { std::cout << " operator void*()\n"; return nullptr; }
operator bool() const { std::cout << " operator bool()\n"; return true; }
};
struct Y {
X x;
bool test1() { std::cout << "test1()\n"; return x; }
bool test2() const { std::cout << "test2()\n"; return x; }
};
int main() {
Y y;
y.test1();
y.test2();
}
输出:
test1()
operator void*()
test2()
operator bool()
发布于 2016-09-13 16:29:13
隐式this
指针是非const
的。因此,在考虑任何const
方法之前,重载解析发生在所有非const
方法(包括模板-这是pub测验中的一个)的集合上。
一个函数被标记为const
并不能使它更适合非const
this
指针,如果你明白我的意思的话。
参见http://en.cppreference.com/w/cpp/language/overload_resolution,它在很大程度上代理了这些标准。
https://stackoverflow.com/questions/39465404
复制相似问题