gpt4 book ai didi

c++ - 用户定义的字符串文字与 Const 字符串的比较

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:49 25 4
gpt4 key购买 nike

考虑以下具有这两种结构的代码:

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;
}

两者之间有几个问题。

  1. 虽然它们产生相同的结果,但它们是否被认为是等效的?
    • 在“内存占用”、“编译运行时效率”等方面等同。
  2. 各自的优点/缺点是什么。
  3. 是否有任何优势 - 劣势?

我刚刚接触到用户定义文字的概念,我正试图更好地理解它们的功能和用途。

编辑

好吧,让那些试图回答的人有点困惑。我熟悉 const 的用法。问题似乎不止一个。但总的来说,我的想法很难用语言或问题的形式表达出来,但我试图了解的两者之间的区别的总体概念是:使用“常量标准”之间是否有任何主要区别: :strings"而不是 "user-defined string literals"?

最佳答案

std::string HELP  = "Press F1 for help"_str;

没有什么不同

std::string HELP  = "Press F1 for help";

std::string 可以从 C 风格的字符串构造。


Are these considered equivalent or not although they produce the same result?

除非编译器可以通过 const 执行一些更积极的优化,否则它们是相同的。


What are the pros/cons of each.

const 防止字符串常量的意外突变。


你不需要在这里使用 std::string - 你有可以是 constexpr 的编译时常量:

struct MessageConst {
static constexpr const char* HELP { "Press F1 for help" };
static constexpr const char* ABOUT { "Press F2 for about" };
static constexpr const char* EXIT { "Press ESC to exit" };
};

上面的代码保证没有动态分配,并确保可以在编译时计算常量。

关于c++ - 用户定义的字符串文字与 Const 字符串的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com