为什么std::string不提供到const char *的operator?
2009-01-20 22:11
501 查看
为什么std::string不提供到const char *的operator?原因很简单,隐式地转换到const char *,会使程序员容易失误。通不过编译的代码并不可怕,可怕的是编译正常,但逻辑完全错误,甚至一运行就崩溃。
假定STL的string提供了const char *的operator:
那么说不定哪天程序员不小心就写出如下的可怕代码:
如果有个程序员想拼接两个字符串并返回它们的结果,他本来是想将函数的返回类型定义为std::string,结果不小心写成了const char *。如果string提供了到const char *的operator,那么编译会通过,编译器失去了发现这种低级问题的机会。反之,如果没有提供,下面这段代码就无法编译,程序员就会发现,啊,我本来是想返回std::string的。
假定STL的string提供了const char *的operator:
operator const char * () const { return c_str(); }
那么说不定哪天程序员不小心就写出如下的可怕代码:
如果有个程序员想拼接两个字符串并返回它们的结果,他本来是想将函数的返回类型定义为std::string,结果不小心写成了const char *。如果string提供了到const char *的operator,那么编译会通过,编译器失去了发现这种低级问题的机会。反之,如果没有提供,下面这段代码就无法编译,程序员就会发现,啊,我本来是想返回std::string的。
const char * str_append(const char * s1, const char * s2) { std::string result(s1); result.append(s2); return result; }
相关文章推荐
- 如何解决error C2664: “atof”: 不能将参数 1 从“std::string”转换为“const char *”
- 高德地图引入库错误std::string::find_first_of(char const*, unsigned long, unsigned long) const"
- std::string , Qstring和 const char * 的互相转换
- VS2010不能将参数 1 从“std::string”转换为“const char *”解决
- const char *string() const怎么解释?为什么有两个const
- const char * 和 std::string.c_str()是个危险的东西!
- ANSI与UTF-8编码互相转换,CString,std::string,char*,const char*互相转换
- "std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const"问题的解决办法
- VS2010不能将参数 1 从“std::string”转换为“const char *”解决
- convert a std::string to const char* or char*
- std::string stringf(const char* format, ...)
- C++ 不能通过‘...’传递有不能平凡复制的类型‘const string {aka const class std::basic_string<char>}’
- cocos2d-x 关于 std::string 与 const char* 之间转换的奇怪问题
- NSString,NSData,std::string,const char*相互转化
- Convert std::string to const char* or char*
- cannot convert parameter 1 from 'std::string' to 'const char *'
- std::string ,QString和const char * 的互相转换
- const char * 和 std::string.c_str()是个危险的东西!
- VS2010不能将参数 1 从“std::string”转换为“const char *”解决
- VS2013不能将参数 1 从“std::string”转换为“const char *”解决