gpt4 book ai didi

c++ - 构造函数的赋值初始化

转载 作者:可可西里 更新时间:2023-11-01 17:25:05 26 4
gpt4 key购买 nike

我正在尝试调用构造函数的不同版本,我想到了这个

#include<iostream>
#include<string>
using namespace std;
class game{

public:
float version;
string name;
game()
{
name = "game";
version = 1.0;
}
game(float v,string n)
{
version = v;
name = n;
}
game(float v)
{
version = v;
name="any";
}
};
int main()
{
game lol1(1.0,"league of legends"); //functional form
game lol2 = 2.0; //assignment form
game lol3{3.0,"league2"}; //uniform initialization
game *pt = &lol1;
cout<<pt->name<<endl;
return 0;
}

每个语句都会编译,但如果我写

 game lol2 = 2.0,"league of legends2"; //code 2

我得到一个错误:

expected unqualified-id before string constant

但下面的代码工作正常:

game lol2 = {2.0,"league of legends2"}; //code 3

我不明白第二个代码到底有什么问题。有什么想法吗?

最佳答案

你所说的“赋值表”是一个复制初始化

它的工作方式就好像一个临时对象是从一个指定为初始值设定项的参数构造的,然后传递给类的复制构造函数或移动构造函数。

所以,代码

game lol2 = 2.0,"league of legends2"; //code 2

...只是语法上无效。


提示:您可以只使用默认参数值,而不是三个构造函数,其中第二个添加第一个参数,第三个添加第二个参数:

class game{

public:
float version;
string name;
game(float v = 1.0,string n = "game")
: version( v ), name( n )
{}
};

: 语法是构造函数成员初始化列表。

有时效率更高,有时必要,而且通常更简洁和常规。

关于c++ - 构造函数的赋值初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39495349/

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