【发布时间】:2012-12-11 17:26:19
【问题描述】:
如果我这样做:const char* StringPtr = "string0",
那么它肯定是在内存的某个地方,我可以得到StringPtr的地址。
但如果我这样做:#define STRING0 "string0",那么STRING0 驻留在哪里?
或者,内存中不存在STRING0,因为编译器将STRING0 的使用替换为"string0"?
据我所知,无论何时在代码中写入任何字符串,编译器都必须将它放在内存中的某个位置,但我不知道它的确切行为。
但我对此不太确定。
谁能解释编译器如何处理#define-ed 或声明为char* 的字符串?
另外,哪个更好? 头文件中的#define、extern const char*或extern const std::string字符串?
谢谢!
【问题讨论】:
-
它不存储内存。在程序编译之前,你可以想象成这样:预处理器会复制你给STRING0的值,然后粘贴到你使用的地方。