为什么不编译?不应该编译吗?我不明白什么? (使用g ++ -std = c ++ 1y)
struct S{
int a,b;
void operator=(int x){a=x;b=x*x;}
};
int main(){
S s0=S{15,20};
S s1;s1=5;
S s2;s2=7;
S s3=9;
}
main.cpp:10:7:错误:从'int'转换为非标量类型'S'请求
在我看来,“S s1; s1 = 5;”和“S s1 = 5;”至少应该是一个天真的用户所期望的!这是不是真的有充分的理由吗?
答案 0 :(得分:3)
S s1 = 5;
和S s1; s1 = 5;
不相同。
第一个是为正在创建的对象5
提供初始值设定项s1
的声明。没有任务。 (=
符号在声明中的用途与在语句中的用途不同 - &
,*
等。
第二个声明s1,默认构造它;然后调用赋值运算符。
S s1 = 5;
完全等同于S s1 { S(5) };
,但临时S(5)
通常会进行复制省略。