gpt4 book ai didi

c++ - 奇怪的 GCC 数组初始化行为

转载 作者:IT老高 更新时间:2023-10-28 21:53:32 25 4
gpt4 key购买 nike

我在查看另一个问题时遇到了此代码的变体(原始代码使用 std::thread 而不是 std::vector,但语法相同):

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
std::vector<double> vecs[10] = std::vector<double>(10, 1);
for(auto& vec: vecs){
std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout<<std::endl;
}
return 0;
}

这段代码不应该编译; std::vector<double> vecs[10] = std::vector<double>(10, 1);不是有效的初始化语法,clang 用 error: array initializer must be an initializer list 拒绝它.但是,GCC accepts it并且似乎用指定的临时拷贝初始化列表中的每个 vector 。

这是我从未听说过的一些 GCC 扩展(它也设法幸存了 -pedantic-errors)还是只是一个普通的错误?

最佳答案

我认为这是一个错误。

#include <vector>

int main()
{
std::vector<double> x = std::vector<double>(10, 1);
std::vector<double> vecs[10] = x;
return 0;
}

有效(如您所见)。

虽然

int main()
{
int x = 10;
int is[10] = x;
return 0;
}

产生(预期的)错误。

关于c++ - 奇怪的 GCC 数组初始化行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com