返回的字符串是否从getline()以null结尾?

Eri*_*c Z 6 c++ string getline

谷歌搜索一段时间之后我不太确定的一件事是返回的getline()字符串.希望在这里得到确认.

std::getline
Run Code Online (Sandbox Code Playgroud)

这个全局版本返回一个std :: string,因此它不一定是以null结尾的.有些编译器可能附加'\ 0'而其他编译器则不会.

std::istream::getline
Run Code Online (Sandbox Code Playgroud)

此函数返回一个c样式的字符串,因此可以保证字符串以空值终止.

是对的吗?

das*_*ght 4

空终止是一个仅适用于 C 字符串的概念;它不适用于 的对象std::string- 它们允许您通过调用 来查找大小size(),并且不需要 null 终止。但是,无论字符串的数据来自何处,从std::string的函数返回的字符串都以 null 结尾。c_str()

\n\n

operator [pos]C++11 标准在第 21.4.5.2 节中描述了先决条件:

\n\n
\n

返回:*(begin() + pos)如果pos < size(). charT否则,返回对value类型的对象的引用charT(),其中修改该对象会导致 unde\xef\xac\x81ned 行为。

\n
\n\n

请注意pos < size(),而不是pos <= size():标准明确允许std::string对象不具有空终止。

\n