【发布时间】:2017-12-05 00:40:45
【问题描述】:
我在 C/C++ 代码中看到过这个:
char * GetName()
{
return "Aurian";
}
引擎盖下到底发生了什么? "Aurian" 存储在内存中的哪个位置,以便在我离开 GetName() 范围时它仍然存在,并且我得到一个 char * ?我猜它不遵循与返回 int 相同的规则。以及这有什么关系
char * name = "Aurian";
这个实现是否依赖?另外,GetName() 会被编译成 "Aurian" 吗?
This thread 似乎暗示某种跳转表可用于所有字符串文字,无论如何用于 GCC。
【问题讨论】:
-
你应该得到a warning关于
const char*->char*转换的信息。 -
在实践中,字符串文字(通常)位于为文字保留的只读内存段中,因此该函数返回指向该段中字符串的指针。其他太大而不能作为直接操作数的文字——例如双精度浮点常量——将在同一段中。您对优化器可能会做什么的描述有点模糊。如果函数是自动内联的,则返回指向字面量的指针的函数调用将被简单地使用指针本身替换。
-
与其他所有字符串字面量相同的位置(即静态存储区)
-
是的,你的字符串在内存中的位置取决于实现。
-
C 和 C++ 的答案不同。建议只用其中一种语言标记这篇文章。
标签: c++ c string pointers memory