当使用 C++ 20 指定的初始化器时,不需要为每个字段指定一个值:
struct Foo
{
int i;
void* p;
};
Run Code Online (Sandbox Code Playgroud)
可以这样初始化:
Foo bar = {
.i = 22
};
Run Code Online (Sandbox Code Playgroud)
遗漏的字段是否为零初始化?所以在这个例子中p保证被设置为nullptr?
即将推出的 C2x 标准的变化之一似乎是
删除 K&R 函数定义
据我了解,K&R 风格定义是我们必须声明一个不带参数的函数的原因
void foo(void);
Run Code Online (Sandbox Code Playgroud)
代替
void foo();
Run Code Online (Sandbox Code Playgroud)
在 C2x 中删除 K&R 风格是否意味着我们现在可以/应该简单地对不带参数的函数使用空括号,就像其他语言一样?
根据我的理解,当创建派生类的对象时,基类构造函数会自动调用(如果存在没有参数的构造函数)。复制构造函数似乎不是这种情况:
#include <iostream>
class Base
{
public:
Base()
{
std::cout << "Base Constructor called" << std::endl;
}
Base(const Base& ref)
{
std::cout << "Base Copy Constructor called" << std::endl;
}
};
class Derived : Base
{
public:
Derived()
{
std::cout << "Derived Constructor called" << std::endl;
}
Derived(const Derived& ref) //: Base(ref) // <- without this Base copy constructor doesnt get called
{
std::cout << "Derived Copy Constructor called" << std::endl;
}
};
int main()
{
Derived d1;
Derived d2 …Run Code Online (Sandbox Code Playgroud)