我需要在我的c ++程序中共享一些字符串.我应该使用#define还是const string?谢谢
mystring1.h
#define str1 "str1"
#define str2 "str2"
Run Code Online (Sandbox Code Playgroud)
或者
mystring2.h
extern const string str1;
extern const string str2;
Run Code Online (Sandbox Code Playgroud)
mystring.cpp
const string str1 = "str1";
const string str2 = "str2";
Run Code Online (Sandbox Code Playgroud)
Mar*_*lon 25
喜欢第二种选择.如果使用第一个选项(预处理器),则限制了对象的灵活性.
请考虑以下内容......您将无法以这种方式比较字符串:
if (str1 == "some string")
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果它是 C++ 而不是 C,你真的应该使用一些变量而不是预处理器宏。前者比后者更清晰。此外,如果您使用C++17,则可以使用内联变量:
inline const std::string str = "foobar";
Run Code Online (Sandbox Code Playgroud)
或者
// constexpr is implicitly inline
constexpr char str0[] = "foobar";
constexpr const char* str1 = "foobar";
constexpr std::string_view str2 = "foobar";
Run Code Online (Sandbox Code Playgroud)
这也比 using 更清晰extern
,也可以在仅标头的 API 中使用。
如果它是C++,您应该使用C++标准库std::string
.它比预处理器宏更清晰,它在定义时在内存中只有一个位置,并且它具有所有额外的功能,std::string
而不仅仅是指针比较,就像const char*
使用预处理器宏创建的隐式一样.
小智 5
为了利用 C++ 的 OO 优势,我会说使用 struct/class。
标题:
struct Constants {
static const string s1;
static const string s2;
};
Run Code Online (Sandbox Code Playgroud)
cp:
const string Constants::s1 = "blah1";
const string Constants::s2 = "blah2";
Run Code Online (Sandbox Code Playgroud)
参考:
cout << Constants::s1 << endl;
Run Code Online (Sandbox Code Playgroud)