这个问题在论坛上很少受到关注。
之前曾有人问过,但没有人捕捉到这个小细节。结果,我不确定自己是否做对了:
简单示例:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://the.url.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file' => curl_file_create($file),
'list_item' => [
'foo',
'bar'
]
]);
$response = curl_exec($ch);
这是正确的吗?请注意,int值未初始化。 虽然将其设置为0不会有问题,但会出现更多问题:
struct TEST {
bool a;
int b;
};
TEST func() {
return { false };
}
从向量,数组到函数指针,结构的最后一个成员可能会变得越来越复杂。
返回内联初始化的结构时,可以将某些成员留空吗?
答案 0 :(得分:9)
这称为聚合初始化。
https://en.cppreference.com/w/cpp/language/aggregate_initialization
如果初始化程序子句的数量少于成员和基数(从C ++ 17开始) 或初始化程序列表完全为空,则其余成员和基数(从C开始++ 17)由其默认成员初始化程序(如果在类定义中提供了)初始化,否则(自C ++ 14起)由空列表初始化(根据通常的列表-初始化规则(使用默认构造函数对非类类型和非聚合类执行值初始化,以及对聚合进行聚合初始化)。如果引用类型的成员是这些其余成员之一,则程序格式错误。
因此,在聚合初始化中,您允许提供的子句少于结构体中的成员。其余所有没有默认初始化程序的成员(例如X)将被初始化为X {}。