{ } 构造函数实现中的赋值运算符 => 错误



{}操作员不是分配操作员吗?另外,为什么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

相关内容

最新更新