如何使用命名实例创建中的参数消除构造函数调用的歧义?

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

在此示例中,最后一行无法编译。我明白为什么,但我想知道如何让编译器理解我想调用

Class(const int &)
来创建一个未命名的实例,而不是尝试调用未定义的默认构造函数并创建一个名为
i
:

的实例
struct Class {
    Class(const int &) {}
};

void foo() {
    int i;

    // Works
    Class(int(i));

    // Fails
    Class(i);
}
c++ constructor disambiguation
1个回答
0
投票

您需要使用大括号初始化,以便语法不会认为您正在尝试创建类型为

i
、名为
Class
的对象。对你来说这意味着

Class{i};

将创建一个未命名的临时对象,该对象将在完整表达式结束时被销毁。

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