У меня есть этот код:компилятора возвращает неинициализированное значение
#include <iostream>
using namespace std;
void funcA()
{
int a = 4;
}
void funcB()
{
int b;
cout << b;
}
int main()
{
funcA();
funcB();
cout << endl;
return 0;
}
Если я скомпилировать без оптимизации: g++ -o run file.cpp
я получаю в результате: 4
Если я скомпилировать его с: g++ -O3 -o run file.cpp
я получаю в результате : 0
Теперь, я бы ожидать, в обоих случаях
1) не возвращают ничего из funcA, так как мы просто называть его и в удовольствие cA мы просто присваиваем значение переменной (ничего не возвращаем).
2) Верните предупреждение от компилятора относительно funcB, так как мы не инициализируем значение b.
Я нашел this answer лучше (подробнее).
Это неопределенное поведение. То, что вы получаете, это то, что вы получаете, потому что неопределенная причина – NathanOliver
Ну, неопределенное поведение не определено, и споры об этом, таким образом, бесполезны. И если вы хотите получать предупреждения, включите предупреждения. –
* Теперь я ожидал бы в обоих случаях ... * - Нет, неопределенное поведение не работает так, как вы «ожидаете». – PaulMcKenzie