g ++和clang ++不同的行为,初始化C类样式的类类型

时间:2016-05-23 13:04:10

标签: c++ arrays g++ language-lawyer clang++

我认为这是一个g ++错误,但我要求确认。

以下代码:

#include <complex>
#include <iostream>

int main()
{
    std::complex<double>  ac[10] = 23.5;

    for (int i = 0; i < 10; ++i)
        std::cout << ac[i] << ", ";

    std::cout << std::endl;

    return 0;
}

无法使用

在clang ++ 3.5上编译
  

&#34;错误:数组初始值设定项必须是初始化列表&#34;)

但是使用g ++ 4.9.2编译,没有错误或警告。

g ++编译的可执行文件的输出是

(23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0), (23.5,0),

所以这个数组初始化

std::complex<double>  ac[10] = 23.5;

使用等号右边的值作为数组的每个元素的初始化(并且,我认为,如果它是标准接受的特征,则可能有用)

如果我用std::complex<double>数组替换double数组

double  ac[10] = 23.5;

g ++给出了类似于clang ++ one的错误:

  

&#34;错误:数组必须使用括号括起的初始化程序&#34;来初始化。

另一种情况:矢量数组

std::vector<double>  ac[10] = std::vector<double>(3, 0.5) ;

g ++编译它(并初始化数组中的每个向量),clang ++给出了常见的错误。

所以我认为它只是在初始化类(struct?)类型的数组时出现的g ++错误。我要求确认。

0 个答案:

没有答案