C++运算符的优先顺序:GCC 5.2与Visual Studio 2015
C++ Operator Precedence: GCC 5.2 vs Visual Studio 2015
让我们使用简单的C++代码,如:
int main(){
int a = 0;
while(a<3) {
a=a++;
std::cout<<a<<std::endl;
}
}
当g++5.2.0进入无限循环并只打印零时,使用Visual Studio 2015构建的这段代码将打印1、2、3。
根据C++运算符优先级分配,运算符(=)的优先级低于后增量。这意味着第一个零是对变量"a"的赋值,之后"a"递增,所以在第一次迭代后a=1。所以从VS 2015中得出的结果是正确的。GCC为什么产生不同的输出?
您的pogram无效(未定义的行为),因此编译器可以生成任何内容。
问题是在一个语句中多次为单个变量赋值(与序列点有关)。
a=a++;
因此应该是:
a++;
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- Qt Visual Studio 2015 加载项编译问题
- 包含在 <WinSock2> Visual Studio 2015 中时出现错误
- 在 Windows 10 上的 Visual Studio 2015 中使用 _open 和 _setmode
- 如何在不进入 Visual Studio 2015 中的外部库的情况下单步执行我的代码 (F11)
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- Visual Studio 2015 中的调试速度很慢 -- 无法关闭页面堆?
- 在 C++ 中使用带有正则表达式的 G++ 和 Visual Studio 14 2015 编译器时会产生不同的结果
- 安装 SFML 后 Visual Studio 2015 中出现错误
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- 在Visual Studio 2017上使用VC++ 2015工具链时缺少ATL标头
- Visual Studio 2015 安装问题
- 迁移到 Visual Studio 2015 时 ATL 不起作用
- 使用 Visual Studio Shell (隔离) 2015 编译
- Visual 2015 上的 std::get_time 不会在错误的日期失败
- Visual 2015 C++编译器:使用对象调用静态成员不会导致编译器错误
- Visual 2015 C++程序未运行,符号问题
- Visual 2015链接错误与boost日志
- Visual 2015 Compiling DLL