我在我正在试用的新 C++ 编辑器(CLion)中有此代码:
struct screenPoint {
float x = 0, y = 0;
screenPoint(float x_, float y_): x{x_}, y{y_}{}
};
struct position {
screenPoint ul;
float width = 0, height = 0;
position(screenPoint p, float w, float h): ul{p},width{w},height{h}{}
};
接近尾声的是初始化语句
ul{p}
,我认为这是使用大括号初始化的有效 C++ 方式。然而,CLion 提示:Incompatible types in initialiser: Types 'float' and 'screenPoint' are not compatible.
注意:没有编译器错误或警告,代码按预期工作。
如果我将其更改为
ul(p)
,错误就会消失。现在,我知道
screenPoint
没有接受另一个 screenPoint
的构造函数,但在这样的初始化中是否有必要? 最佳答案
这是一个编辑器错误。具有相同类型元素的列表初始化应该调用隐式复制构造函数。
有一个关于尝试复制聚合的核心语言缺陷 (1467),但这不是聚合。
关于c++ - 这是糟糕的 C++ 风格还是编辑器错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39317585/