Итак, немного кода на С++:
void func( const std::string& theString )
{
std::string theString( theString );
theString += " more string";
std::cout << theString;
}
который компилируется с помощью GCC 4.8 и VS 2013. Из моего знания на С++ код в порядке с локальной переменной theString, которая вводится в область видимости, которая затем скрывает theString от аргумента функции. В точке построения theString единственной theString в области видимости является аргумент функции, который передается конструктору std::string. Построенный std::string затем называется theString, который входит в область видимости и theString используется позже в коде. Уф!
Однако, GCC, похоже, действует как theString, переданный конструктору std::string, является локальным theString (который еще не сконструирован), в результате чего скомпилированная программа сбой. С VS 2013 код компилируется и работает нормально.
Итак,
- Правильно ли мой код? Или я делаю что-то вне спецификации, что означает, что поведение GCC undefined.
- Это ошибка в GCC?