gpt4 book ai didi

c++ - 从 constexpr 字符串初始化字符数组

转载 作者:行者123 更新时间:2023-12-02 01:26:15 26 4
gpt4 key购买 nike

我有类似的代码:

#define STR "ABC"
// ...
char s[] = STR;
puts(s);
s[2] = '!';
puts(s);

我尝试用 constexpr 对其进行现代化改造:

constexpr char STR[] = "ABC"
// ...
char s[] = STR;
puts(s);
s[2] = '!';
puts(s);

但它不再编译。

如何在没有运行时损失的情况下从 constexpr 常量初始化堆栈上的字符串?

最佳答案

C 风格数组只能由文字初始化,不能由另一个数组或 const char* 初始化。

您可以切换到std::array

constexpr std::array<char,4> STR{"ABC"};
int main() {
std::array s{STR};
// OR: auto s{STR};
}

不幸的是,它需要指定STR中字符串文字的长度,如果你有C++20,你可以使用std::to_array :

constexpr std::array STR{std::to_array("ABC")};

可以选择将 std::array 替换为 auto

如果您没有 C++20,您仍然可以使用上面链接中的实现来编写您自己的 to_array

还有 std::string_viewstd::span 但两者都是非拥有指针。

关于c++ - 从 constexpr 字符串初始化字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74570952/

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