【发布时间】:2014-04-29 05:49:12
【问题描述】:
似乎在纯布尔上下文中的 c++ 中,operator char*() 的优先级高于 operator bool() const;并启用 c++11 模式并使用 explicit operator bool() const 无济于事。这是 g++ 中的错误还是语言标准中的错误?或者我没有看到这种疯狂的行为有充分的理由吗?
问题的简单演示:
#include <stdio.h>
struct A
{
char buf[512];
int err;
operator char* () { return buf; }
operator const char* () const { return buf; }
operator bool () const { return !err; }
// explicit operator bool () const { return !err; } // same problem
};
int main()
{
A a;
a.err = -42;
if (a) {
printf("lolwut?\n");
return 1;
}
return 0;
}
【问题讨论】:
-
这可能是由于
const。您是否尝试添加operator bool() { return !err}? -
是的,添加一个非常量版本的
operator bool()是一种解决方案,但感觉就像是丑陋且不必要的代码重复(尤其是因为在我的真实代码中,检查并不像@那么简单987654329@:) -
有一些方法可以避免
const和非const方法之间的代码重复。 -
explicit operator char怎么样?毕竟,您可以明确地进行所有转换。