首页 >后端开发 >C++ >可以使用同名构造函数参数来初始化 C 成员变量吗?

可以使用同名构造函数参数来初始化 C 成员变量吗?

Susan Sarandon
Susan Sarandon原创
2024-12-12 10:53:09772浏览

Can C   Member Variables Be Initialized Using Constructor Arguments with the Same Name?

使用同名构造函数参数初始化成员变量

在 C 中,可以使用同名构造函数参数来初始化成员变量作为成员变量。如下例所示,该技术已被证实在使用 g 4.4 和 clang 编译时不会出现警告或错误。

class Blah {
    std::vector<int> vec;

public:
    Blah(std::vector<int> vec): vec(vec) {}

    void printVec() {
        for (unsigned int i = 0; i < vec.size(); i++)
            printf("%i ", vec.at(i));

        printf("\n");
    }
};

根据 C 标准 (§12.6.2/7),这个初始化是合法的并且保证可以工作。 mem-initializer 的表达式列表中的名称在构造函数的范围内进行计算,允许使用 this 指针来引用正在初始化的对象。

在上面的示例中,构造函数参数vec被初始化为同名成员变量vec。每次创建 Blah 类的对象时都会进行此初始化。

建议

考虑接受构造函数参数作为 const 引用,以避免不必要地复制原始向量对象,如下所示:

Blah(const std::vector<int> &amp; vec): vec(vec) {}

以上是可以使用同名构造函数参数来初始化 C 成员变量吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn