考虑以下具有这两种结构的代码:
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" 优于“用户定义的字符串文字”?