以下是内联(在头文件中定义)静态成员函数。文字字符串“ MyClass”是否始终保证在静态内存中?如果不是,这是否不会在堆栈中返回指针?
const char * className()
{
return "MyClass";
}
编辑:
这个怎么样?
const RWCString& className()
{
return "MyClass";
}
RWCString
是一个字符串类,具有一个带const char*
的隐式构造函数。http://www.roguewave.com/portals/0/products/sourcepro/docs/11/html/toolsref/rwcstring.html
最佳答案
第一个例子:
const char * className()
{
return "MyClass";
}
很好
"MyClass"
是类型为char const[8]
的文字,其生存期始于调用代码之前,结束于代码完成后,因此没有问题。但是,第二个示例不起作用。
const RWCString& className()
{
return "MyClass";
}
它要求在函数内构造
RWCString
类型的对象,以便能够返回对其的引用。但是,作为局部变量或函数内临时变量构建的内容无法通过引用返回,因此会出现未定义的行为(如果编译)。但是,您可以非常简单地将其转换为“良好”功能:
const RWCString& className()
{
static RWCString const N = "MyClass";
return N;
}
在这里,我创建了一个本地静态对象
N
,它将在首次调用该函数时构造。因为它是static
,所以它的生存期超出了调用,因此可以返回对其的引用。编辑:正如史蒂夫指出的那样,临时比此处的局部变量更合适。