代码之家  ›  专栏  ›  技术社区  ›  juztcode

在类-c中初始化静态const数组++

  •  2
  • juztcode  · 技术社区  · 5 年前

    考虑以下代码,我用 #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的答案

    1 回复  |  直到 5 年前
        1
  •  2
  •   jyl    5 年前

    让他们 inline 。以下代码可以编译。

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

    或者更好,

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

    感谢约翰指出这一点。