gpt4 book ai didi

c++ - 聚合初始化 - vector 和数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:49 25 4
gpt4 key购买 nike

我知道下面的语句有效

std::vector<int> a{1,2,4} --->A (Aggregate Initialization)

或以下声明

std::vector<int> a;
a = {1,2,4}; ---->B Variable already initialized. - Then aggregate initialization is called

但是在数组的情况下

 int c[3]={1,4};  ---->C (1,4,0)

但是以下是不允许的

int c[3]; 
c = {1,4}; ---->D

现在我的问题是为什么 B 工作而 D 不工作?

最佳答案

std::vector<int> a{1,2,4};

这是初始化列表初始化,而不是聚合,因为vector不是聚合——它的数据存储在堆上。你需要有 #include <initializer_list>让它工作,尽管该 header 通常包含在 <vector> 中.

a = {1,2,4};

这也通过一个在 std::initializer_list 上重载的函数, 语义与函数调用相同:

a.assign( {1,2,4} );
 int c[3]={1,4};

聚合初始化。但是你不能做 c = { 3, 5, 6 }之后,因为大括号初始化列表可能只是新变量的初始化器,而不是内置表达式的操作数。 (在声明中,= 符号只是初始化的符号。它不是通常的运算符。花括号列表是赋值运算符的语法特别允许的,但这种用法仅在函数重载时有效,这会导致列表初始化一个新变量:函数参数。)

最后一个问题的答案是没有办法编写必要的 operator = “裸”数组的重载,因为它必须是一个成员函数。解决方法是使用 std::copy和一个 std::initializer_list对象。

关于c++ - 聚合初始化 - vector 和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190820/

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