字符串和STL容器缺乏隐式转换

时间:2013-03-06 14:17:45

标签: c++ stl containers implicit-conversion stdstring

为什么在编写像

这样的代码时C ++没有为bool和STL容器定义的std::string隐式转换
if (!x.empty()) { ... }

而不是更短

if (x) { ... }

x类型为std::stringstd::vector时?

我也对std::string(在C ++ 03中)在STL示例中没有隐式转换为const char*的事实感到困惑,例如

std::string s("filename");
std::ofstream(s.c_str();

1 个答案:

答案 0 :(得分:5)

在C ++中不这样做的一个原因是,那种类型的转换往往会导致subtle bugs

Stroustrup在C ++编程语言[第3版]中专门解决了关于c_str()的问题:

  

转换为C风格的字符串可能由operator const char*()而不是c_str()提供。如果这种转换出乎意料的情况,本来可以提供隐式转换的便利,但代价是意外。