C++ std::string::c_str()是否可以返回null ptr?

C++ std::string::c_str()是否可以返回null ptr?,c++,string,c++11,nullptr,C++,String,C++11,Nullptr,我在这里和其他资源上读过几个主题,但没有找到确切的答案。答案似乎是永远不会。请确认 停下来。从来没有。如图所示: 因此,如果这不会抛出(取决于实现),c_str()可能会返回(char\u t*)nullptr 我相信没有其他方法可以从c_str()获取nullptr。但必须请StackOverflow社区确认。感谢您的关注。否。由于c\u str返回指向以null结尾的字符数组的指针p,因此必须有一些值i>=0,以便p[i]='\0',因此p不能为空。否,c\u str()将始终返回以nul

我在这里和其他资源上读过几个主题,但没有找到确切的答案。答案似乎是永远不会。请确认


停下来。从来没有。如图所示:

因此,如果这不会抛出(取决于实现),
c_str()
可能会返回
(char\u t*)nullptr


我相信没有其他方法可以从
c_str()
获取
nullptr
。但必须请StackOverflow社区确认。感谢您的关注。

否。由于
c\u str
返回指向以null结尾的字符数组的指针
p
,因此必须有一些值
i>=0
,以便
p[i]='\0'
,因此
p
不能为空。

否,c\u str()将始终返回以null结尾的c样式字符串,假设之前没有未定义的行为。将
nullptr
传递到
string::string
只会使字符串尝试将
(char*)nullptr
解释为指向c字符串的指针。它仍会将指向错误的c字符串复制到其托管storage@NeilButterworth:“以null结尾的C样式字符串”有点多余,因为C样式字符串定义为以null结尾的字符数组。如果愿意,则不能使用“非空终止的C样式字符串”。这不是一个C风格的字符串。@Kerrek以我的经验,在解释时,一点冗余从来都不是坏事。
std::string str{nullptr};//未定义的行为
正如您所注意到的,这是未定义的行为,因此所有赌注都是无效的。您不能使用调用未定义行为后发生的事件作为反例。如果可以在您的平台上取消对nullptr的引用并返回0,该怎么办?@Yakk:Every
p[k]
必须指向
0的对象
std::string str {nullptr};  // Undefined behavior