初始化类中的静态 const 数组 - C++



考虑以下代码,我用#this符号标记了重要的行:

#include <glad/include/glad/glad.h>
#include <string>
#include <iostream>
#ifndef LAMP_H
#define LAMP_H
namespace lmp{
class genLamp{
unsigned int lmpVAO;
static const float flag{1}; //#this is allowed 
static const float default_shape[]{  //#this is not allowed
-0.5f, -0.5f, -0.5f,  0.0f, 0.0f,
0.5f, -0.5f, -0.5f,  1.0f, 0.0f,
0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
-0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 0.0f,
-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
-0.5f,  0.5f,  0.5f,  0.0f, 1.0f,
-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
-0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
-0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
-0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
0.5f, -0.5f, -0.5f,  1.0f, 1.0f,
0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
-0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
-0.5f,  0.5f,  0.5f,  0.0f, 0.0f,
-0.5f,  0.5f, -0.5f,  0.0f, 1.0f
};
genLamp(std::string vShaderPath, std::string fShaderPath){
glGenVertexArrays(1, &lmpVAO);
glBindVertexArray(lmpVAO);

}
unsigned int getVAO(){
return this->lmpVAO;
}
};
}
#endif  

首先,为什么甚至不允许这样做,语言试图通过防止这种情况来防止什么问题?和

由于无论如何,default_shape数组在对象之间都是相同的,因此我试图通过将其设置为静态来共享此数组。但是,这似乎是不可能的。 我唯一能想到的是将变量声明到全局范围内,这在我的情况下不是很好。c++有任何语法来声明和初始化static const arrays吗?我正在与c++17一起编译,以防信息有用。

编辑:如果可能的话,也请解释@user的答案

使它们inline.编译以下代码。

class Temp {
inline static const float values[] = { 0.0f, 1.0f };
};

甚至更好,

class Temp {
constexpr static float values[] = { 0.0f, 1.0f };
};

感谢约翰指出这一点。

最新更新