{}在构造函数内部赋值运算符implementation =>错误

{}在构造函数内部赋值运算符implementation =>错误

问题描述:

{}运算符是否为赋值运算符?另外,为什么int val{10};在main里面工作,但是构造函数中的赋值语句是非法的?{}在构造函数内部赋值运算符implementation =>错误

检查例子

此代码:

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};}; 
       ^
+2

请勿使用以下划线和大写字母开头的标识符!这些保留用于实现(编译器和标准库)。 – aschepler

{}不是赋值运算符。它是统一的初始化。这是正确的做法,

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

+0

@Sir,虽然'{}'是一个统一的初始化操作符,你知道为什么它在main中的使用与'='接近吗?但在我的例子中,它不是? [谢谢你的回答] – Homunculus

+1

查看更新的答案。 –