使用 constexpr 编译时间字符串串联
compile time string concatenation using constexpr
#include <iostream>
#include <string>
constexpr std::string appendStringC(std::string s)
{
return s + " Constexpr func";
}
std::string appendString(std::string s)
{
return s + " Regular func";
}
int main()
{
std::string s1 = "String 1";
std::string s2 = "String 2";
std::cout << std::endl
<< appendStringC(s1) << std::endl
<< appendString(s2) << std::endl;
return 0;
}
我正在尝试使用 constexpr 执行编译时字符串前缀/后缀连接操作。但是,此示例会产生以下错误:
const_string_generation.cpp: In function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’:
const_string_generation.cpp:4:23: error: invalid type for parameter 1 of constexpr function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’
constexpr std::string appendStringC(std::string s)
^
In file included from /usr/include/c++/5.3.0/string:52:0,
from /usr/include/c++/5.3.0/bits/locale_classes.h:40,
from /usr/include/c++/5.3.0/bits/ios_base.h:41,
from /usr/include/c++/5.3.0/ios:42,
from /usr/include/c++/5.3.0/ostream:38,
from /usr/include/c++/5.3.0/iostream:39,
from const_string_generation.cpp:1:
/usr/include/c++/5.3.0/bits/basic_string.h:71:11: note: ‘std::__cxx11::basic_string<char>’ is not literal because:
class basic_string
^
/usr/include/c++/5.3.0/bits/basic_string.h:71:11: note: ‘std::__cxx11::basic_string<char>’ has a non-trivial destructor
const_string_generation.cpp:4:23: error: invalid return type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ of constexpr function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’
constexpr std::string appendStringC(std::string s)
因为 std::string 不是文字。我正在寻找一种简单的方法来做到这一点,我不关心这个例子的向后兼容性。Ideone : 链接
std:string::operator+()
不是一个constexpr
,事实上它通常以依赖于堆内存的非常动态的方式实现。 您可以像这样附加静态字符串常量:
"append this string " " to this string"
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 通过字符串来计算长度需要更长的时间,而不是移动字符串几次?
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 如何将时间字符串 (M:SS) 转换为浮点数
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 时间持续时间到时间字符串
- 如何将我的每个矢量字符串转换为纪元时间日期
- 如何找到修改后的字符串与原始字符串相等的时间
- 在C++中修改字符串的BigO时间复杂度是多少
- 格式化的时间字符串在解析为time_point时会产生小时差异
- 使用 ctime 保存新时间点会覆盖旧字符串?
- 将日期字符串转换为 unix 时间戳
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- 字符串连接时间复杂度 c++
- 提升,从字符串问题中获得时间
- C 将字符串时间戳转换为STD :: Chrono :: System_Clock :: Time_point
- 将字符串时间转换为UNIX时间戳
- 最接近地图的字符串/时间戳