所以一点C++代码:
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,代码可以编译并正常运行。所以,
最佳答案
不,您的代码无效。
根据C++标准(3.3.2声明点)
[ Example:
int x = 12;
{ int x = x; }
和(3.3.3块范围,#2)