“警告 C4709:数组索引表达式中的逗号运算符” - 但在任何地方都看不到逗号!
以这个小示例代码为例:
struct Test{
operator int() const{
return 0;
}
};
Test test(){
return Test();
}
int main(){
int arr[10];
arr[test()] = 5;
}
在 Visual Studio 2010 下使用 /W4
进行编译会生成 说警告。有趣的是,如果我添加一个简单的默认构造函数,警告就会突然消失。而且,它只适用于该星座。如果我删除函数调用或不返回用户定义的类型,警告就会消失。此外,正如预期的那样,GCC 不会产生这样的警告。
那么,我可以将上述代码的警告视为 Visual Studio 中的错误吗?还是有比看起来更多的内容?至少可以说,这会非常令人惊讶。
编辑:创建了Microsoft Connect 上的错误报告。
Take this little example code:
struct Test{
operator int() const{
return 0;
}
};
Test test(){
return Test();
}
int main(){
int arr[10];
arr[test()] = 5;
}
Compiling under Visual Studio 2010 with /W4
generates said warning. Interestingly, if I add but a simple default constructor, the warning suddenly vanishes. Also, it only works in that constellation. If I remove the function call or don't return a user-defined type, the warning disappears. Also, as expected, GCC doesn't produce such a warning.
So, can I take this warning with the above code as a bug in Visual Studio or is there more to it than seems? Would be very surprising though, to say the least.
Edit: Created a bug report on Microsoft Connect.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这绝对是一个错误 - 误导性警告。
Definitely it is a bug - misleading warning.