Nav*_*een 16
以下是Josuttis STL书中的引用:
但是,没有从字符串对象到C字符串的自动类型转换.出于安全原因,这是为了防止导致奇怪行为的非预期类型转换(类型char*通常具有奇怪的行为)和歧义(例如,在组合字符串和C字符串的表达式中,可以将字符串转换为char*,反之亦然).相反,有几种方法可以在C字符串中创建或写入/复制,特别是,提供c_str()来生成字符串的值作为C字符串(作为具有'\ 0'的字符数组它的最后一个字符).
小智 12
你应该总是避免使用强制转换操作符,因为它们往往会在代码中引入歧义,只能通过使用进一步的强制转换来解决,或者更糟糕的是仍然编译但是没有按照你的期望进行操作.char*()运算符会有很多问题.例如:
string s = "hello";
strcpy( s, "some more text" );
Run Code Online (Sandbox Code Playgroud)
将编译没有警告,但破坏字符串.
const版本是可能的,但由于必须(可能)复制字符串以实现它,因此它将具有不期望的隐藏成本.显式c_str()函数意味着您必须始终声明您确实打算使用const char*.
字符串模板规范有意地允许字符串的"断开连接"表示,其中整个字符串内容由多个块组成.这种表示不允许轻松转换为char*.
但是,字符串模板还提供了c_str方法,以满足您的需要:使用该方法有什么问题?
| 归档时间: |
|
| 查看次数: |
2559 次 |
| 最近记录: |