c++ - 是 !!在 C++ 中转换为 bool 的安全方法?

标签 c++ visual-c++ boolean

[此问题与this one 相关但不相同。 .]

如果我尝试使用某些类型的值作为 boolean 表达式,我会收到警告。有时我不会抑制警告,而是使用三元运算符 (?:) 将其转换为 boolean 值。使用两个非运算符(!!)似乎做同样的事情。

这就是我的意思:

typedef long T;       // similar warning with void * or double
T t = 0;
bool b = t;           // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t;              // any different?

那么,双重非技术真的做同样的事情吗?它比三元技术更安全还是更安全?这种技术对于非整数类型是否同样安全(例如,使用 void *double for T)?

我不是在问 !!t 是否是好风格。我在问它在语义上是否与 t 不同?真:假

最佳答案

的论点!运算符和三元运算符的第一个参数都隐式转换为 boolean 值,所以 !!和?:是 IMO 愚蠢的 Actor 阵容多余的装饰。我投票给

b = (t != 0);

没有隐式转换。

关于c++ - 是 !!在 C++ 中转换为 bool 的安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/206106/

相关文章:

c++ - GCC 关于 strncpy 使用的误报警告?

c++ - poll(2) 在数据准备就绪时不返回

c++ - 尝试使用 std::get_time 解析 YYMMDD 并失败

java - java中堆栈值与字符串的比较

c++ - OpenGL : Strange behaviour 中的 OpenCV 图像

c++ - 为什么成员类型需要前向声明,而成员函数不需要?

c++ - 为什么不能在 Visual C++ 中动态分配堆栈内存?但是 gcc 可以做到

c++ - Visual Studio 2010 C++ SDL 游戏可以在编译它的计算机上运行,​​但不能在任何其他计算机上运行

boolean - 为什么 Boolean::New() 返回 Handle<>,而其他基元返回 Local<>?

c++ - 为什么 vector 指针占用这么多内存?