Итак, немного кода на С++:
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?