我std::to_string()
在以下 lambda 函数中遇到问题:
#include <iostream>
#include <string>
inline constexpr int a_global_constant { 12345 };
int main( )
{
auto calculateMsgLength = [ ] ( ) consteval -> std::size_t
{
std::string str1 { "Part 1 " };
std::string str2 { "Part 2 " };
std::string msg { str1 + str2 /*+ std::to_string( a_global_constant )*/ };
// The complete message should look like this: Part 1 Part 2 12345
return msg.length( );
};
constexpr std::size_t msgLength { calculateMsgLength( ) };
std::cout << "Message length == " << msgLength << '\n';
}
上面的代码不能在我的GCC v11.2上编译,因此我必须在编译器资源管理器中使用GCC(主干)来编译它。
但是,仅取消注释对它的调用std::to_string()
不会编译:
<source>: In function 'int main()':
<source>:19:61: error: 'main()::<lambda()>' called in a constant expression
19 | constexpr std::size_t msgLength { calculateMsgLength( ) };
| ~~~~~~~~~~~~~~~~~~^~~
<source>:10:35: note: 'main()::<lambda()>' is not usable as a 'constexpr' function because:
10 | auto calculateMsgLength = [ ] ( ) consteval -> std::size_t
| ^
<source>:10:35: error: call to non-'constexpr' function 'std::string std::__cxx11::to_string(int)'
.
.
.
在不久的将来某个时候会std::to_string
用STL 制作吗?constexpr
还是我应该寻找另一种方法来做到这一点?有什么替代方法std::to_string
?