c – 为什么可以将nullptr分配给std :: string?

c – 为什么可以将nullptr分配给std :: string?,第1张

概述所以今天我写了一个相当难以找到的bug,我将std :: string初始化为nullptr(不是指向std :: string的指针,而是值本身).我发现它显然只能在C 11或更高版本中使用clang. #include <string>#include <iostream>using namespace std;class Meh{ int x;};class Foo{ 所以今天我写了一个相当难以找到的BUG,我将std :: string初始化为nullptr(不是指向std :: string的指针,而是值本身).我发现它显然只能在C 11或更高版本中使用clang.
#include <string>#include <iostream>using @R_301_6889@space std;class Meh{    int x;};class Foo{private:  std::string x=nullptr;  Meh y=nullptr; //remove this line and it compilespublic:  std::string z=nullptr;};int main(voID){    Foo f;    cout << f.z;    return 0;}

正如您所看到的,我尝试将nullptr分配给一个类的随机实例,但它不起作用.字符串中有什么神奇之处可以让它工作,这种语法甚至是有效的?我假设在这种情况下我会遇到类型转换错误.

作为参考,我用这个编译:

clang++ test.cpp -O3 -g -fno-inline -std=c++11 -Wall

它没有给出任何形式的警告,但如果不使用C 11则会出错

解决方法 这只是因为 std::string中有 constructors(链接中的数字(5))和0700(链接中的数字(3)),因为 std::string接受了一个const char *,因此nullptr匹配.

在C 11之前(因此在nullptr之前),当您尝试从0或NulL构造时,会出现同样的问题.所有这些情况都是非法的并导致未定义的行为,尽管过去至少有一个STL(RogueWave?)接受它并生成一个空字符串.

总结

以上是内存溢出为你收集整理的c – 为什么可以将nullptr分配给std :: string?全部内容,希望文章能够帮你解决c – 为什么可以将nullptr分配给std :: string?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243260.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存