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

标签 c++ g++ gnu

以下 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/

相关文章:

c++ - QT - 现有插槽在 mainwidow.cpp 中不可见

c++ - “to_string”是't a member of “std”吗?

c++ - 在 C++ 中从 const 字符串初始化 void* 的任何非(char*)正确方法

arrays - 我的 Fortran 代码遇到奇怪的问题

php - 调试 SWIG PHP 扩展 : undefined symbol: _ZN15SplashOutputDev9updateAllEP8GfxState

c++ - 当迭代器发生变化时,对迭代器对象的引用发生变化

c++ - C++ 中预处理器方法的别名

c++ - 为 i686-elf 交叉编译和链接 libstdc++(在 Ubuntu 16.04 上使用 g++)

c - hsearch_r 覆盖哈希表

c - 有什么方法可以强制编译器不从缓存中删除任意变量吗?