奇怪的是几乎没有关于这个主题的在线文档。我有一个应用程序,其中包含用于 UI 的硬编码字符串以及分散在源代码中的各种其他内容。我试图至少汇总其中一些,因为其中许多需要根据应用程序编译的平台进行更改。
我用了第二个例子here (在下面复制以供引用)但它对实际工作方式的细节有所了解。似乎所有内容都在 project_strings.cpp
中重新初始化,并且从未真正调用过代码。
// in your project_strings.h
namespace MyProjectStrings {
const char *password;
...
}
// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password = "Password:";
...
}
// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password);
谁能解释一下,或者告诉我这是个糟糕的主意,我应该做点别的吗?
最佳答案
您链接的示例只是在头文件的命名空间中声明一些 const char*
,然后在 .cpp 文件中定义它们。尽管 C++ 使用的语法不正确 - 头文件中的声明应该是 extern const char*
而不是 const char*
作为 const
值在 C++ 中默认为内部链接。
大多数 C++ 编译器/链接器工具链会将来自一个翻译单元 (project_strings.cpp
) 的所有字符串放在生成的可执行文件的只读数据段中。
这是处理静态字符串的一种合理、简单的方法,但如果您需要处理本地化或其他复杂情况,您可能需要更动态/更复杂的方法。
关于c++ - 如何创建字符串表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800551/