将boost :: optional转换为bool

dim*_*mba 14 c++ boost type-conversion boost-optional

我怎么能阻止编译这段代码的最后一行?

#include <boost/optional.hpp>

int main()
{
    typedef boost::optional<int> int_opt;
    int_opt opt = 0;
    bool x = opt;  // <- I do not want this to compile
}
Run Code Online (Sandbox Code Playgroud)

最后一行不检查opt包含的int值,而是编译为bool的类型转换,并且似乎不是用户的意图.

安全布尔成语似乎与此相关吗?

Dan*_*ger 18

重点boost::optional是启用这样的代码:

void func(boost::optional<int> optionalArg)
{
    if (optionalArg) {
       doSomething(*optionalArg);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此隐式转换bool是一个功能,不应该阻止编译.

  • @dimba:自然安全的bool习语不会阻止在纯粹的布尔语境中使用该值. (3认同)