以下是内联(在头文件中定义)静态成员函数。文字字符串“ 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,所以它的生存期超出了调用,因此可以返回对其的引用。

编辑:正如史蒂夫指出的那样,临时比此处的局部变量更合适。

09-10 14:40