gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:51:29 25 4
gpt4 key购买 nike

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

非工作代码

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);

Online GDB link to code

最佳答案

原始类中没有来自 int 的转换构造函数,但由于它是聚合,因此您可以使用大括号初始化:

struct MyStruct {
int x;
int y;
};

MyStruct foo{1}; // initializes x with 1

对于问题:

Why does C++ know how to use this constructor? Shouldn't it still be having a compiler error saying that I can't assign an int to a struct?

第二个代码中的转换构造函数是隐式的。让它显式,你会得到一个编译错误。

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

//MyStruct foo = 1; // now error
MyStruct foo{1}; // OK
MyStruct foo(1); // OK

关于c++ - 为什么我可以用标量值初始化类/结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77002336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com