在以下代码中:
class Class
{
private:
LUID luid;
public:
Class()
{
luid = { 0, 0}; // A. Does not compile
LUID test = {0, 0}; // B. Compiles
test = {1,1}; // C. Does not compile
}
为什么A和C不对,但B很好?
我为A和C得到的错误是:
错误C2059:语法错误: '{'
错误C2143:语法错误: 失踪 ';'在'{'
之前错误C2143:语法错误: 失踪 ';'在'}'之前
我认为它与C ++版本有关,虽然我不确定它使用的版本除了它不是很新。
答案 0 :(得分:3)
语句LUID test = {0, 0}
是使用初始化列表的局部变量的初始化;这是有效的,因为它在变量定义的过程中使用。相反,test = {0, 0}
是作业,因为test
在其他地方定义。仅在特定情况下支持分配初始化列表(例如,在分配标量或特定类类型时(参见,例如braced-init-list assignment)。
其他情况,例如数组,不能分配,只是初始化:
typedef int LUID[2];
int main(){
LUID t = { 10, 20 }; // compiles
// t = { 10, 20}; // does not compile, since an array is not assignable
return 0;
}