以下 if 条件在 Visual Studio C++ 中编译:
if(int x = 5) { std::cout << x; } 1
和
if(static int x = 5) { std::cout << x; } 2
另一方面,gnu 编译器只编译第一个。 从测试来看,变量的范围似乎就在 if 条件内。
但是,由于 Visual Studio 编译了两个版本,我想知道是否有任何差异?
最佳答案
按照C++标准,GNU是对的,VisualStudio是错的。继 6.4/1 之后:
condition:
expression
type-specifier-seq declarator = assignment-expression
允许使用type-specifier-seq,但不能包含存储类说明符,如static
。要查看类型说明符序列可以具有什么,请阅读 this .
关于if 条件中的 C++ 静态和非静态变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34692621/