C++ 逗号运算符的左右操作数无效(警告)
我在我的类中的构造函数中得到一个警告,我以前从未见过它。这就是我的构造函数的样子C++ 逗号运算符的左右操作数无效(警告),c++,class,constructor,warnings,comma,C++,Class,Constructor,Warnings,Comma,我在我的类中的构造函数中得到一个警告,我以前从未见过它。这就是我的构造函数的样子 Account(std::string n = "NULL", std::string i = "0", Stats s = (0,0,1) ) : name(n), id(i), stat(s) {} 如果删除这些逗号中的任何一个,都会导致编译错误,不是吗? 此警告是否不正确,或者我是否可以更改某些内容来修复它?问题在于:0,0,1 这是表达式0,0,1周围的括号,该表达式的计算结果为
Account(std::string n = "NULL", std::string i = "0", Stats s = (0,0,1) )
: name(n), id(i), stat(s) {}
如果删除这些逗号中的任何一个,都会导致编译错误,不是吗?
此警告是否不正确,或者我是否可以更改某些内容来修复它?问题在于:0,0,1
这是表达式0,0,1周围的括号,该表达式的计算结果为1。逗号运算符是一个中缀运算符,用于计算第一个和第二个表达式并返回第二个表达式。在本例中,您有两个这样的操作符
我不知道你想要什么,但我猜那不是
编辑:似乎您需要统计数据s0,0,1。问题是:0,0,1
这是表达式0,0,1周围的括号,该表达式的计算结果为1。逗号运算符是一个中缀运算符,用于计算第一个和第二个表达式并返回第二个表达式。在本例中,您有两个这样的操作符
我不知道你想要什么,但我猜那不是
编辑:似乎您需要统计数据s0,0,1。问题最有可能出现在统计数据s=0,0,1的部分。C++将此视为要计算的表达式序列,而只保留最后一个值。它返回1。你可能是说
Stats s = Stats(0,0,1)
如果你的统计结构有这样一个构造函数,它就可以工作。请注意,在C++11中,您有以下较短的语法:
Stats s = {0,0,1}
问题最有可能出现在Stats s s=0,0,1的部分。C++将此视为要计算的表达式序列,而只保留最后一个值。它返回1。你可能是说
Stats s = Stats(0,0,1)
如果你的统计结构有这样一个构造函数,它就可以工作。请注意,在C++11中,您有以下较短的语法:
Stats s = {0,0,1}
我想你要找的是给函数参数一个默认值,它是一个结构,我想这里已经讨论过了我想你要找的是给函数参数一个默认值,它是一个结构,我想这里已经讨论过了如果你真的复制了警告,我可以帮你。我在标题中写了警告,省略了[-Wunused value],如果你真的复制了警告,我可以帮你。我在标题中写了警告,省略了[-Wunused value],我不确定这是否有效。初始化结构时需要使用常规括号。大括号用于初始化数组。@EnginKayraklioglu不,这是错误的。在C++11之前,在某些情况下是正确的,而不是在这个情况下。@juanchopanza感谢您的解释。也许在旧版本中也是合法的,我只是从来没有遇到过这种情况。@EnginKayraklioglu Pre-C++11,这取决于统计数据是否是一个聚合。是的,大括号去掉了这个警告。但是如果使用c++11之前的版本,它们将无法工作。我不确定这是否有效。初始化结构时需要使用常规括号。大括号用于初始化数组。@EnginKayraklioglu不,这是错误的。在C++11之前,在某些情况下是正确的,而不是在这个情况下。@juanchopanza感谢您的解释。也许在旧版本中也是合法的,我只是从来没有遇到过这种情况。@EnginKayraklioglu Pre-C++11,这取决于统计数据是否是一个聚合。是的,大括号去掉了这个警告。但是如果使用c++11之前的版本,它们就不起作用了;我用它来分隔初始化值。我只是重新阅读了这个问题,意识到我给了你一个错误的建议。该语法不能用于默认参数。。。我很抱歉。。。这是另一个构造函数,由statint,int,int组成;我用它来分隔初始化值。我只是重新阅读了这个问题,意识到我给了你一个错误的建议。该语法不能用于默认参数。。。我很抱歉。。。除息的