gpt4 book ai didi

c++ - 为什么 C++ 初始化列表在大括号之前?

转载 作者:太空宇宙 更新时间:2023-11-04 14:57:32 25 4
gpt4 key购买 nike

我想知道下面两个类有什么不同。

示例 1:

class A
{
string name;
public:
A(const char* _name):name(_name){}
void print(){cout<<"A's name:"<<name<<endl;}
};

示例 2:

class A
{
string name;
public:
A(const char* _name){name(_name);}
void print(){cout<<"A's name:"<<name<<endl;}}

为什么例子1通过了,最后一个错了?谢谢

最佳答案

在示例 1 中,您立即使用给定值初始化字符串。在示例 2 中,您先创建一个空字符串,然后再分配它。

尽管存在一些性能差异并且忽略了由于复制构造函数处理等原因可能存在的差异,但结果基本相同。

然而一旦你使用了一个 const 成员,你就必须使用示例 1 的方式来做到这一点,例如我通常通过以下方式创建唯一 ID:

class SomeObject
{
static unsigned int nextID = 0;
const unsigned int ID;
SomeObject() : ID(nextID++)
{
// you can't change ID here anymore due to it being const
}
}

关于c++ - 为什么 C++ 初始化列表在大括号之前?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856425/

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