1

我有一种情况,我需要将编译时间常量存储在头文件中,并且我在使用它的类中执行此操作,因为我不想将常量暴露给包含此头文件的其他文件。(以及它依赖于另一个隐藏结构的事实)

像这样:

namespace ns {
    class bla {
    private:
        struct internalStruct {
            // ...
        };

        // I put it in the class as I don't want other files to be able to see this
        constexpr const size_t compileConstant = sizeof(internalStruct) * 8;
    };
}

问题是我得到一个

Constexpr is not valid here

错误。解决方案是添加static,但是我读到constexpr积分成员应该是内联的。

我该怎么办?

4

1 回答 1

1

添加静态对于您的用例应该非常好。参考资料也是这么说的:

在函数或静态数据成员 (C++17 起) 声明中使用的 constexpr 说明符暗示内联。

而且由于这是一个编译时常量,您不妨让它在所有类实例之间共享,而不是在每个实例的基础上共享(这通常是使用偶数const变量的方式)。

于 2021-09-06T05:06:26.343 回答