在C++11之后,我想到了c_str()
and data()
同等地 https://stackoverflow.com/questions/194634/string-c-str-vs-data.
C++17 为后者引入了一个重载,它返回一个非常量指针(参考 https://en.cppreference.com/w/cpp/string/basic_string/data,我不确定它是否已完全更新。 C++17):
const CharT* data() const; (1)
CharT* data(); (2) (since C++17)
c_str() https://en.cppreference.com/w/cpp/string/basic_string/c_str只返回一个常量指针:
const CharT* c_str() const;
为什么这两种方法在 C++17 中有所区别,特别是当 C++11 使它们变得同质时?换句话说,为什么只有一个方法得到了重载,而另一个却没有?
新的重载是由P0272R1 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html对于 C++17。论文本身和其中的链接都没有讨论为什么只data
被赋予了新的重载,但是c_str
不是。我们只能推测在这一点上(除非参与讨论的人插话),但我想提出以下几点供考虑:
我意识到 P0292R1 的真正动机是确实存在遗留 API,这些 API 错误地或由于 C 原因仅采用可变指针,即使它们不会发生变化。尽管如此,我想我们不想向 string 已经庞大的 API 添加更多绝对必要的内容。
还有一点:从 C++17 开始are now 被允许write http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2475到空终止符,只要写入值零即可。 (以前,向 null 终止符写入任何内容曾经是 UB。)c_str
将创建另一个进入这个特殊微妙之处的切入点,我们拥有的微妙之处越少越好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)