7 c++ language-lawyer safe-bool-idiom c++11
我正在考虑用explicit operator bool已经使用C++ 11特性的代码替换所有安全bool习语的实例(所以老编译器不认识显式转换操作符这一事实并不重要),所以我想知道如果它可以导致一些微妙的问题.
因此,从旧的和沉闷的安全布尔成语转换为新的和有光泽的,可能导致的所有可能的不兼容性(即使是最微小的)也是如此explicit operator bool?
编辑:我知道切换是一个好主意,因为后者是一种语言功能,编译器很好理解,因此它的工作并不比实际上只是一个黑客更糟糕.我只是想知道可能存在的差异.
如果您在代码中错误地使用了 safe-bool 转换,那么只会explicit operator bool是不兼容的,因为它不会让您那么容易地做错误的事情。不然应该没啥问题就好了。事实上,即使出现问题,您仍然应该切换到explicit operator bool,因为如果您这样做,那么您可以在 safe-bool 转换的使用中找出问题所在。
根据这篇文章,一些编译器使用成员函数指针为 safe-bool 实现发出低效指令,
\n\n\n\n当人们开始使用这个习惯用法时,发现某些编译器存在效率损失 \xe2\x80\x94 成员函数指针导致编译器头痛,导致在获取地址时执行速度变慢。尽管差异很小,但当前的做法通常是使用成员数据指针而不是成员函数指针。
\n