gpt4 book ai didi

C++11 大括号/聚合初始化。什么时候使用它?

转载 作者:行者123 更新时间:2023-11-28 04:47:27 37 4
gpt4 key购买 nike

在阅读了 C++11 和围绕它的通用指南之后,我经常阅读有关应如何使用类内初始化和聚合初始化的内容。

这是一个似乎是“旧”做事方式的例子:

class Example
{
public:
// Set "m_x" to "x", "m_y" gets set to the default value of 5
Example(int x) : m_x(x), m_y(5)
{
}

private:
int m_x;
int m_y;

};

据我了解,这是人们现在推荐的:

class Example
{
public:
Example(int x) : m_x{x}
{
}

private:
int m_x{0}; // Supposedly {} works too? I guess this would
// only be necessary if I had another constructor
// taking in 0 arguments, so "m_x" doesn't go uninitialized
int m_y{5};

};

我的问题是:这对指针、引用和一些 STL 类有何影响?这些的最佳做法是什么?它们只是使用 {} 进行初始化吗?另外,即使构造函数初始化了变量,我也应该这样做吗? (即编写 m_x{},即使它被构造函数设置为其他内容)

谢谢。

最佳答案

您可以使用类内成员初始化和委派构造函数来减少代码重复。请参阅我对相关问题的回答:Refactoring with C++ 11 .

可以使用类内成员初始化将指针类型的成员变量初始化为nullptr。使用类内成员初始化来初始化指向其他东西的指针似乎没有用。您必须根据您的具体用例来判断它。

引用类型的成员变量很可能需要使用初始化列表语法进行初始化。使用类内成员初始化来初始化对其他东西的引用似乎没有用。您必须根据您的具体用例来判断它。

回复。来自标准库的类...您当然可以使用类内成员初始化来初始化容器类型。下面的类(class)非常好。

struct Foo
{
std::vector<int> ar = {20};
};

关于C++11 大括号/聚合初始化。什么时候使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48981606/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com