【发布时间】:2017-11-24 11:42:30
【问题描述】:
考虑以下具有这两种结构的代码:
std::string operator"" _str(const char* str, std::size_t len) {
return std::string( str, len );
}
struct MessageLiterals {
std::string HELP = "Press F1 for help"_str;
std::string ABOUT = "Press F2 for about"_str;
std::string EXIT = "Press ESC to exit"_str;
};
struct MessageConst {
const std::string HELP { "Press F1 for help" };
const std::string ABOUT { "Press F2 for about" };
const std::string EXIT { "Press ESC to exit" };
};
int main() {
MessageLiterals ml;
std::cout << "Using Literals:\n";
std::cout << ml.HELP << std::endl;
std::cout << ml.ABOUT << std::endl;
std::cout << ml.EXIT << std::endl;
std::cout << std::endl;
MessageConst mc;
std::cout << "Using Constant Strings:\n";
std::cout << mc.HELP << std::endl;
std::cout << mc.ABOUT << std::endl;
std::cout << mc.EXIT << std::endl;
std::cout << "\nPress any key and enter to quit." << std::endl;
char c;
std::cin >> c;
return 0;
}
两个问题之间浮现在脑海中。
- 尽管它们产生相同的结果,但它们是否被认为是等效的?
- 在“内存占用”、“编译运行时效率”等手段上等价
- 各有什么优缺点。
- 各有优缺点吗?
我刚刚遇到了user-defined literals 的概念,我正试图更好地了解它们的功能和用途。
编辑
好吧,对于那些试图回答的人来说有点困惑。我熟悉const 的使用。问题似乎不止一个。但一般来说,我的想法更难用语言或问题的形式表达,但我试图理解的两者之间差异的总体概念是:使用“常量 std: :strings" 优于 "用户定义的字符串文字"?
【问题讨论】:
-
只是一个小注释,不需要定义_str,可以使用内置的文字s。
-
每个问题一个问题。您应该尝试缩小范围。
-
您的核心问题实际上是关于不同形式的初始化,而不是初始化表达式恰好表示为用户定义的文字这一事实。
-
@OriBS 我对内置很熟悉。我只是想更好地了解
literals并使用const string和user defined string literal之间的差异来比较它们。
标签: c++ string string-literals user-defined-literals const-string