此问题已在此处有答案:
Why is "operator bool()" getting called if a class object needs conversion to int in C++?(4个答案)
Why can you add an integer to a string literal?(1个答案)
c++ interesting syntax for printing new line in std::cout [duplicate](1个答案)
20小时前关闭。
为什么这段代码可以编译?因为没有声明operator[]
,所以我认为它会失败。operator[]
的定义从何而来?
struct Test {
operator bool() const {
return true;
}
};
int main(int argc, char** argv) {
Test test;
if (test["wut"])
cout << "Success (test[\"wut\"])\n";
}
1条答案
按热度按时间euoag5mw1#
该运算符来自内置的下标运算符,它将表达式
A[B]
视为*(A + B)
。在这些情况下,
test
通过operator bool()
方法隐式转换为整数类型的值0
或1
(所有这些情况下都是1
)。这导致
*(1 + "wut")
=〉'u'
的求值,然后导致if
条件通过,因为'u'
是非零值。同样,以下条件也会传递if ("wut"[test])
,因为它解析为"wut"[1]
=〉*("wut" + 1)
=〉*("ut")
=〉'u'
将您的成员声明为
explicit operator bool()
,以防止您的类型被隐式转换为其他整型。