я наткнулся на некоторый код сегодня, я упростил его к этому:Попутный неинициализированная безопасности
#include <iostream>
using std::cout;
using std::cin;
bool changeX(int &x)
{
x = 5;
return true;
}
void printvals(bool bval, int intval)
{
cout << bval << " : " << intval;
}
int main()
{
int x;
printvals(changeX(x), x);
cin.get();
}
Здесь x
еще инициализирован в то время он передается функции printvals
, но я могу с уверенностью сказать, что х будет всегда быть инициализированным до того, как его использует печать? Я попытался запустить мой упрощенный код в режиме отладки VS2013, который дал мне: Run-Time Check Failure #3 - The variable 'x' is being used without being initialized.
. Тем не менее, запуск его в режиме release прошел нормально и печатался: 1 : 5
как и ожидалось.
Означает ли это, что я могу использовать этот подход в производственном коде? Будет ли x
всегда инициализироваться до того, как printvals
может использовать его, чтобы он не вызывал UB?
Возможный дубликат [Компиляторы и порядок оценки аргументов в C++] (http://stackoverflow.com/questions/621542/compilers-and-argument-order-of-evaluation-in-c) – CoryKramer