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