所以一点C++代码:

void func( const std::string& theString )
{
    std::string theString( theString );
    theString += " more string";
    std::cout << theString;
}

使用GCC 4.8VS 2013可以正常编译。就我的C++知识而言,代码是可以的,将局部变量theString放入范围内,然后将其从函数参数中隐藏theString。在theString构造时,作用域中唯一的theString是传递给std::string构造函数的函数参数。然后将构造的std::string命名为theString,将其纳入范围,该theString在代码的后面使用。 !

但是,GCC的行为类似于传递给theString构造函数的std::string是本地theString(尚未构造),导致已编译的程序崩溃。使用VS 2013,代码可以编译并正常运行。

所以,
  • 我的代码正确吗?还是我在做超出规范的事情,这意味着GCC行为是不确定的。
  • 这是GCC中的错误吗?
  • 最佳答案

    不,您的代码无效。

    根据C++标准(3.3.2声明点)


    [ Example:
    int x = 12;
    { int x = x; }
    



    和(3.3.3块范围,#2)

    10-06 15:41