我在我正在试用的新 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/

10-10 21:29