【问题标题】:Why I am getting this error: constexpr' is not valid here为什么我收到此错误: constexpr' 在此处无效
【发布时间】:2018-10-24 05:55:10
【问题描述】:

我有这个代码:

class myClass
{
        constexpr int x = 4;
};

在 Visual Studio 2015 上,我收到此错误:

'constexpr' is not valid here

为什么我会收到此错误?我想要一个可以在头文件中初始化的 const 静态变量。

下一步我想将我的类更改为模板,但这个常量与类的类型无关。

【问题讨论】:

  • “我想要一个 const 静态变量...” 那为什么不声明它static
  • @CinCout 我想既然是常量表达式,那就没必要定义成静态的了。 const 表达式如何可以是非静态的?
  • @mans 在全球范围内。在全局范围和类中它们具有不同的含义
  • @Swift 有什么区别?你能详细说明一下吗?在类作用域中,变量如何可以是 const 而不是 static?
  • 它将是 const ,但对于类实例不是唯一的,它仍然是实例的一部分并且需要上下文。当实例被构造并被初始化时,它变为 const(可以在构造函数的初始化列表中设置)。静态成员(无论是否为 const)在程序启动时的某个时刻被创建和初始化(此时未定义,只是保证在创建任何对象之前被初始化)。一个 const 静态成员之后不能更改,仅此而已,它仍然只创建一次。对于全局范围的静态关键字,只需指定 id 的本地链接。

标签: c++ c++11 visual-studio-2015 constexpr


【解决方案1】:

static 数据成员不能声明为constexpr。使用

class myClass
{
    static constexpr int x = 4;
};

改为。

【讨论】:

    【解决方案2】:

    我想要一个可以在头文件中初始化的 const 静态变量

    如果您主要关心的是可被所有模板类型实例共享的常量值,那么您可以更改为以下内容:

    class myClass
    {
        static const int x = 4;
    };
    

    如果您关心的是内存空间(尽管它在所有实例之间共享),您可以只使用编译预处理解决方案(即#Define X 4)

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多