【问题标题】:Why does g++ compile this?为什么 g++ 编译这个?
【发布时间】:2009-03-15 20:15:54
【问题描述】:

最近很累,写了如下代码:

GLfloat* array = new GLfloat(x * y * z);

当然应该是:

GLfloat* array = new GLfloat[x * y * z];

(注意方括号而不是括号。)

据我所知,第一种形式无效,但g++编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。

为什么?

【问题讨论】:

    标签: c++ compiler-construction syntax segmentation-fault


    【解决方案1】:
    GLfloat* array = new GLfloat(x * y * z);
    

    创建一个名为 array 的指针,指向 GLfloat 类型的对象,其值为 x * y * z

    【讨论】:

      【解决方案2】:

      好吧,new T() 的结果是T*,所以new GLFloat 将返回一个 GLFloat*。只要x*y*z 可以有效传递给 GLFloat 构造函数,它就是有效的代码。

      【讨论】:

        【解决方案3】:

        与以下内容相同:

        int * p = new int(42);
        

        【讨论】:

          【解决方案4】:

          嗯,第一个表达式是一个指向具有值 (xyz) 的 GLfloat 的指针,这是完全合法的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-07-09
            • 1970-01-01
            • 2014-08-05
            • 1970-01-01
            • 2020-02-02
            • 2019-11-15
            • 1970-01-01
            相关资源
            最近更新 更多