相关疑难解决方法(0)

对于默认构造函数和析构函数,"= default"与"{}"有什么不同?

我最初发布这个只是关于析构函数的问题,但现在我正在添加对默认构造函数的考虑.这是原始问题:

如果我想给我的类一个虚拟的析构函数,但是与编译器生成的析构函数相同,我可以使用 =default:

class Widget {
public:
   virtual ~Widget() = default;
};
Run Code Online (Sandbox Code Playgroud)

但似乎我可以通过使用空定义减少输入来获得相同的效果:

class Widget {
public:
   virtual ~Widget() {}
};
Run Code Online (Sandbox Code Playgroud)

这两种定义的行为方式有何不同?

根据此问题的回复,默认构造函数的情况似乎相似.鉴于析构函数的" =default"和" {}"之间的含义几乎没有差异,默认构造函数的这些选项之间的含义几乎没有差别吗?也就是说,假设我想创建一个类型,其中该类型的对象将被创建和销毁,为什么我要说

Widget() = default;
Run Code Online (Sandbox Code Playgroud)

代替

Widget() {}
Run Code Online (Sandbox Code Playgroud)

如果在原始帖子违反某些SO规则后延长此问题,我深表歉意.为默认构造函数发布一个几乎完全相同的问题让我觉得不太理想.

c++ user-defined-functions default-constructor deleted-functions c++11

151
推荐指数
3
解决办法
3万
查看次数

将字符串初始化为null与空字符串

如果我的C++代码(如下所示)有一个初始化为空字符串的字符串,这有什么关系:

std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

与no/null初始化:

std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

有没有最好的做法或陷阱?

c++ string initialization

39
推荐指数
5
解决办法
18万
查看次数

为什么即使尚未初始化字符串[0]也有效?

考虑这段代码

string str;
cout << str[0] << str.size();
Run Code Online (Sandbox Code Playgroud)

而我得到的是不是一个运行时错误,但是" 0",一个0下面的空间.为什么这可能?

c++ string language-lawyer c++11

2
推荐指数
1
解决办法
100
查看次数

字符串类构造函数的安全性

以下安全吗?

string s;
s += "dsgdf";
cout << s;
Run Code Online (Sandbox Code Playgroud)

字符串是自动初始化的""还是我需要这样做?

c++ string

0
推荐指数
1
解决办法
42
查看次数