bal*_*lki 0 c++ undefined-behavior
以下是内联(定义内部头文件)静态成员函数.文字字符串"MyClass"是否始终保证在静态内存中?如果没有,这不会在堆栈中返回指针吗?
const char * className()
{
return "MyClass";
}
Run Code Online (Sandbox Code Playgroud)
编辑:
这个怎么样?
const RWCString& className()
{
return "MyClass";
}
Run Code Online (Sandbox Code Playgroud)
RWCString是一个字符串类,它有一个隐含的构造函数,它接受一个const char*.
http://www.roguewave.com/portals/0/products/sourcepro/docs/11/html/toolsref/rwcstring.html
第一个例子:
const char * className()
{
return "MyClass";
}
Run Code Online (Sandbox Code Playgroud)
很好."MyClass"是一个类型的文字,char const[8]其生命周期在您的代码被调用之前开始,并在您的代码完成之后结束,因此没有问题.
但是,第二个例子不起作用.
const RWCString& className()
{
return "MyClass";
}
Run Code Online (Sandbox Code Playgroud)
它要求RWCString在函数内构造类型对象,以便能够返回对它的引用.但是,作为局部变量或临时函数构建的内容不能通过引用返回,因此您将获得未定义的行为(如果它编译).
你可以非常简单地把它变成一个"好"的功能:
const RWCString& className()
{
static RWCString const N = "MyClass";
return N;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我创建了一个本地静态对象N,它将在第一次调用函数时构造.因为它static的生命周期延伸到调用之后所以可以返回对它的引用.
编辑:正如史蒂夫指出的那样,临时更适合这里的局部变量.