{}运算符不是赋值运算符吗?另外,为什么int val{10};
在main中工作,但是构造函数中的赋值是非法的?
查看示例
此代码有效:
class Time{
int _H, _M, _S;
public:
Time(int h = 0, int m = 0, int s = 0){_H={h};
_M={m};
_S={s};};
~Time(){}
};
这不是:
class Time{
int _H, _M, _S;
public:
Time(int h = 0, int m = 0, int s = 0){_H{h}; //here is the difference
_M{m};
_S{s};};
~Time(){}
};
我从GCC收到的消息就是这个
classes.cpp: In constructor ‘Time::Time(int, int, int)’:
classes.cpp:48:44: error: expression cannot be used as a function
Time(int h = 0, int m = 0, int s = 0){_H{h};
^
classes.cpp:49:16: error: expected ‘;’ before ‘{’ token
_M{m};
^
classes.cpp:50:16: error: expected ‘;’ before ‘{’ token
_S{s};};
^
答案 0 :(得分:2)
{}
不是赋值运算符。它是统一的初始化。这是正确的方法,
class Time{
int _H, _M, _S;
public:
Time(int h = 0, int m = 0, int s = 0):_H{h},
_M{m},
_S{s}{}
~Time(){}
};
它更好的原因是因为在C ++中,不像C#或Java,类成员的初始化发生在构造函数内部执行语句之前。
它在您的第一个示例中起作用的原因是因为=
是一项任务。 _H={h};
将调用赋值运算符。但_H{h};
不是有效的C ++语法。我认为基于错误消息的_H(h);
将尝试调用函数_H
。