我正在考虑用已经使用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 */
}