我正在尝试调用构造函数的不同版本,我想出了这个
#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
我收到错误:
字符串常量
之前的预期unqualified-id
但是下面的代码工作正常:
game lol2 = {2.0,"league of legends2"}; //code 3
我没有得到第二个代码究竟是什么问题。有什么想法吗?
答案 0 :(得分:11)
你打电话给什么?#34;转让表格&#34;是复制初始化。
它就像一个临时对象是由一个参数构造的,它被指定为初始化器,然后被传递给类&#39;复制构造函数或移动构造函数。
所以,代码
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 )
{}
};
:
语法是构造函数成员初始化列表。
它有时可能更有效,有时是必要的,无论如何通常更简洁和传统。
答案 1 :(得分:4)
您没有使用正确的语法从多个值初始化对象。当你这样做
game lol2 = 2.0,"league of legends2";
语法需要一个逗号之后的变量名称,如
type name1 = value1, name2 = value2;
所以你得到了一个错误
type name1 = value1, value2;
^ missing variable declaration here
如果您需要构建多个变量,则只能使用下面的表单
type name = {value1, value2, ..., valuen};
type name{value1, value2, ..., valuen};
auto name = type{value1, value2, ..., valuen};
type name(value1, value2, ..., valuen);
auto name = type(value1, value2, ..., valuen);