{}操作员不是分配操作员吗?另外,为什么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};};
^
{}
不是分配操作员。它是统一的初始化。这是正确的方法,
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
。