c++ - 初始化成员变量后加括号?

标签 c++ initialization member-variables

我看到有人在初始化列表中的成员变量后面加了一个括号。我想知道为什么人们会这样做?

例如,我在头文件中有一个STL容器:

class A{
public: 
    A();
    ...
private: 
    vector<string> v;
}

在源文件中:

A::A() : v() {}

我的问题是什么是 v() 以及为什么人们这样做,因为它看起来也不像 v 被初始化为一个值

最佳答案

这将为成员运行默认构造函数或初始化程序(对于普通类型)。在这种情况下,它将默认构造 vector 。既然是默认构造函数,这里就没有必要了。 v 将在没有初始化程序的情况下默认构造。


class Example {

private:
    int defaultInt;
    vector<int> defaultVector;
    int valuedInt;
    vector<int> sizedVector;

public:

    Example(int value = 0, size_t vectorLen = 10) 
        : defaultInt(), defaultVector(), valuedInt(value), sizedVector(vectorLen)
    {
        //defaultInt is now 0 (since integral types are default-initialized to 0)
        //defaultVector is now a std::vector<int>() (a default constructed vector)
        //valuedInt is now value since it was initialized to value
        //sizedVector is now a vector of 'size' default-intialized ints (so 'size' 0's)
    }

};

对于踢球和咯咯笑声,您还可以执行 thirdVector(vectorLen, value) 以获取具有 vectorLen 元素的 vector。 (因此 Example(5, 10) 将使 thirdVector 成为一个包含 10 元素且值为 5 的 vector 。)

关于c++ - 初始化成员变量后加括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966438/

相关文章:

c++ - 从 C++ 中的初始化列表进行 C 风格的结构初始化

objective-c - 如何在快速便捷的初始化程序中返回自定义对象?

c++ - 复制一个对象并使两者共享一个成员变量(C++)

c++ - 使用非默认构造函数初始化自定义类的继承类

c++ - 如何以编程方式创建/构建 CTabCtrl?

C++:如何连接字符串文字之间的变量?

c++ - 如何在类中初始化 vector ?

访问成员 STL 映射时的 C++ 段错误

c++ - libusb 在 IDE 中不可见

c++ - _WIN64 未在 x64 项目中定义