我正在考虑在已经使用C++ 11功能的代码中将安全布尔成语的所有实例替换为explicit operator bool
(因此旧版编译器无法识别显式转换操作员无所谓),所以我想知道它是否会导致一些微妙的问题。安全布尔成语与显式运算符之间的不兼容bool
因此,什么是所有可以通过从陈旧,失去光泽安全布尔成语切换到新的和有光泽explicit operator bool
将可能造成的不兼容问题(哪怕是最微小的)?
编辑:我知道,无论如何,切换是一个好主意,因为后者是一种语言特性,编译器很好理解,所以它不会比事实上只是一个黑客更糟。我只是想知道可能的差异。
当然你是对的。但是我有一个原因,我用'language-lawyer'标记了这个。我希望标准本身遵循纯粹的事实,而不是对良好实践的建议。得澄清,但无论如何感谢。 – Fanael 2012-02-21 19:00:12
@Fanael:标准,C++ 03和C++ 11都没有提到safe-bool习惯用法,所以不可能引用它来支持我所说的。我隐含的意思是C++ 11已经引入了“明确的操作符bool”,我认为其中一个原因是“显式操作符bool”比所谓的更安全**安全布尔成语。 – Nawaz 2012-02-21 19:06:35
但是标准会谈到用于实现安全布尔成语的事情。所以,虽然这个标准对这个成语本身毫无用处,但它的确切保证几乎是文档隐含的。 – Fanael 2012-02-21 19:11:04