为什么在编写像
这样的代码时C ++没有为bool
和STL容器定义的std::string
隐式转换
if (!x.empty()) { ... }
而不是更短
if (x) { ... }
当x
类型为std::string
或std::vector
时?
我也对std::string
(在C ++ 03中)在STL示例中没有隐式转换为const char*
的事实感到困惑,例如
std::string s("filename");
std::ofstream(s.c_str();
答案 0 :(得分:5)
在C ++中不这样做的一个原因是,那种类型的转换往往会导致subtle bugs。
Stroustrup在C ++编程语言[第3版]中专门解决了关于c_str()
的问题:
转换为C风格的字符串可能由
operator const char*()
而不是c_str()
提供。如果这种转换出乎意料的情况,本来可以提供隐式转换的便利,但代价是意外。