下面的字符串是否包含空终止符'\ 0'?
std::string temp = "hello whats up";
Run Code Online (Sandbox Code Playgroud)
谢谢!:)
在C++ 11之后,我想到了c_str()并且data() 等效.
C++ 17为后者引入了一个重载,返回一个非常量指针(引用,我不确定它是否完全在C++ 17中更新):
const CharT* data() const; (1)
CharT* data(); (2) (since C++17)
Run Code Online (Sandbox Code Playgroud)
c_str() 只会返回一个常量指针:
const CharT* c_str() const;
Run Code Online (Sandbox Code Playgroud)
为什么在C++ 17中区分这两种方法,特别是当C++ 11是使它们成为同构的时候?换句话说,为什么只有一种方法过载,而另一种方法没有?
Vector的新方法data()提供了const和非const版本.
但是string的data()方法只提供const版本.
我认为他们改变了措辞,std::string以便现在要求chars连续(比如std::vector).
当时std::string::data只是错过了什么?或者是一个很好的理由只允许const访问字符串的底层字符?
注意:std::vector::data有另一个很好的功能,调用data()空向量不是未定义的行为.尽管&vec.front()是不确定的行为,如果它是空的.