C++20 constinit 和 std::string

问题描述 投票:0回答:1
我有一个小疑问,但找不到满意的答案。

cppreference提到,如果初始化包含动态初始化部分,则在 C++20 中使用 constinit 时程序格式错误。

我只是想知道为什么下面的代码会编译:

constinit std::string str = "Hello";
由于

std::string

类涉及用于存储字符的动态内存分配,因此看起来很矛盾。由于动态部分,这不应该被禁止吗?

请提供一些指导吗?

提前致谢!

尝试使用标志 -std=C++20 进行编译,程序编译正常,但不应该。

c++ c++20
1个回答
2
投票
std::string

实现不会在堆上分配(这称为“短字符串优化”或“SSO”)。

由于 SSO 可以容纳的确切字符数(如果有)取决于实现,因此您可能不应该依赖它,或者至少应该研究三大标准库如何处理这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.