CLANG中std::string双参数构造函数constexpr初始化失败问题问询
编译期获取SSO尺寸的CLANG兼容性问题
我正在评估通过编译期获取SSO(小字符串优化)最大尺寸值来选择最优容器,同时分析尺寸超出时的堆分配情况。这段逻辑在GCC和MSVC中可正常运行,但在CLANG中,使用std::string的双参数构造函数进行constexpr初始化时会失败。
报错代码示例
constexpr auto MAX_SSO = []() {std::string s; return s.capacity();}(); constexpr auto MAX_SSO_PLUS1 = []() {std::string s(MAX_SSO+1,0); return s.capacity(); }(); // CLANG下该行报错
测试细节
- 将报错行改为
std::string s(1,0)同样会触发失败 - 使用
std::string s{"\0"}则可正常运行 - CLANG报错信息:constexpr变量'MAX_SSO_PLUS1'必须由常量表达式初始化
跨编译器兼容解决办法
constexpr auto MAX_SSO_PLUS1 = []() {std::string s; s.resize(MAX_SSO+1); return s.capacity();}();
内容的提问来源于stack exchange,提问作者doug
相关产品推荐
相关产品推荐

