【发布时间】:2026-01-30 05:55:01
【问题描述】:
这是我的代码:
#include<iostream>
const int & Min(const int& a, const int& b);
int main() {
using namespace std;
auto&& val = Min(1,2);
cout << val << endl;
return 0;
}
const int & Min(const int& a, const int& b) {
return a < b ? a : b;
}
如果我使用 O0 选项 g++ -O0 main.cpp -o main 编译它,结果是 1。如果我使用 O2 选项进行编译,g++ -O2 main.cpp -o main,则结果为 0。
为什么这会给出不同的结果?
【问题讨论】:
-
看一下汇编代码。
-
@OleksandrKravchuk 汇编代码不是解决 UB 问题的好来源
-
您忘记了
-Wall,然后您会在 -O2 处看到警告。
标签: c++ gcc compiler-optimization