【发布时间】:2010-11-25 16:38:16
【问题描述】:
如果 bool() 运算符被重载,构造函数调用是否可以评估为布尔值?
class A
{
public:
A() {};
operator bool() const { return true; }
}
main()
{
if (A a = A())
{
// do stuff
}
}
上面的代码是否有效,还是我需要像这样实现main:
int main(int argc, const char* argv[])
{
A a();
if (a)
{
// do stuff
}
}
这段代码将在我的代码库中到处出现,因此更少的行数、更高的易读性和更小的范围很重要,并且会因此得到改进。
有什么想法吗?
【问题讨论】:
-
你对这段代码的意图是什么?转换为 bool 总是会返回 true 吗?如果是这样,if 语句是多余的。
-
我怀疑这是一个快速示例代码。 “bool operator() () {return foo;}”不是更好的例子吗?
-
这是干什么用的?你在检查错误吗?
-
是的,这只是表达想法的草率代码。 if() 中的内容是我真正想要的。
-
它应该是
operator bool() const {...}- 没有返回类型,并且不修改*this所以const。
标签: c++