C ++私有静态constexpr成员变量

时间:2019-05-23 17:03:16

标签: c++ private constexpr static-members

所以我想知道,给定简单的类:

//Foo.h
class Foo {
private:
    static constexpr int bar = 0;

public:
    int do_something();
};

//Foo.cpp
int Foo::do_something() {
    return 5 + bar;
}

从头文件中完全删除bar是合理的,因为它是私有静态constexpr值,而该值在头文件中从未使用过?

如果只是将其浮动在cpp文件的顶部,它将有效地提供相同的功能,另外还有一点点清除头文件的好处。

有什么理由不这样做吗?

编辑:为清楚起见,这些变量可以在一个或多个函数中使用一次或多次,并且永远不要在头文件中使用。

在我的用例中,这些变量是恒定限制/ vecs,例如:

static constexpr float rotLimitVertical = to_rad(90.0f);
static constexpr float rotLimitHorizontal = to_rad(360.0f);

static const glm::vec3 right    = {1, 0, 0};
static const glm::vec3 up       = {0, 1, 0};
static const glm::vec3 forward  = {0, 0, 1};

我想保留在文件的顶部,以便在需要时易于调整(特别是在变量仅用于一个函数的情况下,请确保将其更改为局部变量可能有意义) ,但这使查找调整变得更加烦人。

1 个答案:

答案 0 :(得分:2)

  

有什么理由不这样做吗?

我认为最好将其移至.cpp文件。您可以做到:

  1. 文件范围为static的变量,或
  2. .cpp文件中匿名名称空间中的变量,或
  3. .cpp文件特定的名称空间中的变量。

选项1

static constexpr int bar = 0;

选项2

namespace
{
   constexpr int bar = 0;
}

选项3

namespace MyFile_Namespace
{
   constexpr int bar = 0;
}