繁体   English   中英

if条件下的C ++静态和非静态变量声明

[英]C++ static and non-static variable declaration in if condition

如果条件在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 要查看type-specifier-seq可以有什么,请阅读此内容

这在C ++ 11中有效:

condition: 
  expression 
  attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause 
  attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

一个缺陷在标准允许却在条件来定义类型,而这已修复了C ++ 14,但由于缺陷的GCC团队似乎已经举行了一个bug修正 ,看起来像它可能会解决这个问题,因为好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM