分配类型和大括号。语法澄清[重复]

问题描述 投票:1回答:2
我刚刚遇到了一些代码,但我相信我从未见过下面显示的语法。

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

因此,很明显构造函数按值接受整数,即int a,后跟赋值运算符并键入int,并且右括号和右括号关闭。我无法解读后半部分(int {})。 int a = int {}是什么意思?请指导我以了解更多信息。我该如何解决?

谢谢,高拉夫

c++ syntax constructor
2个回答
6
投票
在构造函数中,您正在定义一个采用整数和默认构造函数的构造函数。请记住,为所有参数提供默认参数的构造函数也定义了默认构造函数。

  • 您可以这样写:

    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


1
投票
后接赋值运算符

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

© www.soinside.com 2019 - 2024. All rights reserved.