【发布时间】:2023-01-13 17:22:18
【问题描述】:
Clang 与 -std=c++2b:
错误:没有用于初始化“POD”的匹配构造函数
MSVC 19.latest with /std:c++latest :编译成功
#include <vector>
struct POD {
int a;
int b;
int c;
};
int main()
{
POD my_pod(1,2,3);
return 0;
}
这样就可以阻止对构造函数的大量转发调用(例如 std::vector<a>::emplace_back(1,2,3) 也不适用于 Clang)
谁是对的?
我发现能够在这些 POD 结构上使用默认构造函数而无需定义所有内容非常方便。
【问题讨论】:
-
POD my_pod;正在使用默认构造函数。POD my_pod(1,2,3)没有调用默认构造函数。 -
POD my_pod{1,2,3};应该与两者一起工作 -
铿锵是对的。但是您可以使用聚合初始化。
POD my_pod{1,2,3};和push_back({1,2,3});无处不在。 -
根据我的经验,MSVC 从来都不是对的......
-
@463035818_is_not_a_number:是的,{} 初始化适用于两者。但是调用 (1,2,3) 没有像我说的那样编译阻止其他用法。如果您有 POD 向量,则不能使用 emplace_back,它会阻止大量使用。
标签: c++ visual-c++ clang c++23