为什么我可以用标量值初始化类/结构?

问题描述 投票:0回答:1

我今天遇到了这种行为,但我找不到它起作用的原因。

非工作代码

struct MyStruct {
    int x;
    int y;
};

MyStruct foo = 1;
error: conversion from ‘int’ to non-scalar type ‘MyStruct’ requested

工作代码

struct MyStruct {
    int x;
    int y;
    MyStruct(int x) : x(x) {
        //
    }
};


MyStruct foo = 1;

问题

为什么C++知道如何使用这个构造函数?难道它不应该仍然有一个编译器错误,说我无法将 int 分配给结构吗?为什么我不需要

MyStruct foo = MyStruct(1);

在线 GDB 代码链接

c++ constructor
1个回答
0
投票

原始类中没有来自

int
的转换构造函数,但由于它是聚合,因此可以使用大括号初始化:

struct MyStruct {
    int x;
    int y;
};

MyStruct foo{1}; // initializes x with 1
© www.soinside.com 2019 - 2024. All rights reserved.