首页 > 解决方案 > 返回表达式的`{}`的含义

问题描述

我偶然发现以下编译:

#include <string>
#include <iostream>

class A{
    int i{};
    std::string s{};
    public:
        A(int _i, const std::string& _s) : i(_i), s(_s) {
            puts("Called A(int, const std::string)");
        }

};

A foo(int k, const char* cstr){
    return {k, cstr};           // (*)
}

int main(){
    auto a = foo(10, "Hi!");
    return 0;
}

感兴趣的线是 (*)。我猜这个功能foo相当于:

A foo(int k, const char* str){
    return A(k, cstr);
}

但是,(*)中是否有此机制的特殊名称?或者仅仅是编译器知道由于返回类型而调用哪个构造函数的简单事实?

标签: c++returnlist-initialization

解决方案


return {k, cstr};表示这{k, cstr}是返回值的初始化程序。k此外,它表示“返回一个用and初始化的函数返回类型的对象cstr,这意味着确切的行为取决于返回的对象的类型”。

返回值可以通过两种不同的方式初始化:


推荐阅读