c – 安全bool习语和显式操作符bool之间的不兼容性

前端之家收集整理的这篇文章主要介绍了c – 安全bool习语和显式操作符bool之间的不兼容性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在考虑用已经使用C 11特性的代码中的显式运算符bool替换所有安全bool习语的实例(所以老编译器不认识显式转换运算符的事实并不重要),所以我想知道它是否会引起一些微妙的问题.

因此,从旧的和沉闷的安全bool成语切换到新的闪亮的显式操作符bool可能导致所有可能的不兼容性(即使是最微小的那些)?

编辑:我知道切换是一个好主意,因为后者是一种语言功能,编译器很好理解,所以它的工作并不比实际上只是一个黑客更糟糕.我只是想知道可能存在的差异.

解决方法

假设您的代码没有错误(我知道,不是一个安全的假设),可能最大的区别在于,在某些情况下,您可能希望隐式转换为完全bool.显式转换函数不匹配.
struct S1
{
    operator S1*() { return 0; } /* I know,not the best possible type */
} s1;

struct S2
{
    explicit operator bool() { return false; }
} s2;

void f()
{
    bool b1 = s1; /* okay */
    bool b2 = s2; /* not okay */
}

猜你在找的C&C++相关文章