我正在尝试使用constexpr一些现有的代码,但是获取消息
错误:'my_string'在'constexpr'函数中声明为'static'
很简化,代码是:
template <typename T>
constexpr
int foo(const int x)
{
static // error: 'my_string' declared 'static' in 'constexpr' function
constexpr char my_string[] = "my foo error message!";
if (x == 0)
{
std::cout << my_string << std::endl;
}
return x;
}
class boo
{
public:
constexpr boo()
{
static // error: 'constructor_string' declared 'static' in 'constexpr' function
constexpr char constructor_string[] = "my constructor error message.";
}
};
字符串在其他地方使用当然,我想确保它们永远不会重复(如此静态)(并且我希望保持使用静态以便与C ++ 03兼容,其中constexpr不是可以使用BOOST_CONSTEXPR_OR_CONST)。
答案 0 :(得分:2)
目前,constexpr函数中不能包含静态变量。如果使用编译时表达式初始化变量,则建议放宽该要求。
由于你要分配一个字符串文字,我建议只删除'static'并假设编译器尽可能地使它尽可能最优(在实践中应该这样做)。另一个选择是将字符串设置为static constexpr
作为私有类成员,或者在命名空间范围内。