文字字符串在constexpr函数中声明为static

时间:2016-07-27 17:08:36

标签: c++ string static literals constexpr

我正在尝试使用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)。

1 个答案:

答案 0 :(得分:2)

目前,constexpr函数中不能包含静态变量。如果使用编译时表达式初始化变量,则建议放宽该要求。

由于你要分配一个字符串文字,我建议只删除'static'并假设编译器尽可能地使它尽可能最优(在实践中应该这样做)。另一个选择是将字符串设置为static constexpr作为私有类成员,或者在命名空间范围内。