赋值到类型和空大括号. 语法说明

assignment to type and empty braces. clarification on syntax

本文关键字:语法 说明 类型 赋值      更新时间:2023-10-16

我刚刚遇到了一些代码,我相信我从未见过下面显示的语法。

struct A {
int m_int;
A (int a = int {}) : m_int(a) {}
};

所以很明显,构造函数接受一个整数,按值,即int a后跟赋值运算符和类型int,以及空大括号和右括号右括号。我无法破译后半部分(int {}(。int a = int {}是什么意思?请指导我了解更多信息。我该如何解决?

谢谢 高拉夫

在构造函数中,您正在定义一个采用整数和默认构造函数的构造函数。请记住,为其所有参数提供默认参数的构造函数也会定义默认构造函数。

  • 你可以这样写:

    A (int a = 0(;//a 是默认参数。

在您的示例中:

A (int a = int {});//

参数a是从临时整数初始化(未分配(的默认参数,该临时整数是值初始化的,因此因为它是整数,所以它的值初始化为 0,然后用于初始化参数 a。在许多情况下,编译器优化代码以删除副本。

A (int a = int {5.6});// error
A (int a = int(5.6));// truncated to 5

后跟赋值运算符

不。这不是分配操作。这是默认参数的语法。这意味着您可以在不显式传递参数的情况下调用构造函数,在这种情况下,将改为传递int {}。子表达式是临时对象值初始化的语法。