【问题标题】:What is { } when passed to a function in CPP?传递给 CPP 中的函数时 { } 是什么?
【发布时间】:2020-03-17 02:42:28
【问题描述】:

mapinsert 函数将{string,int} 作为参数。这是如何工作的?

#include <map>

using namespace std;

int main(int argc, char *arg[])
{
    map<string, int> m;

    m.insert({"a", 1});
}

【问题讨论】:

  • 已铸造。编译器知道 m 的类型,对于编译器 {"a", 1} 来说,成为 m 的成员似乎没有问题。
  • 如果您使用的是较旧的编译器(或编译为较旧的 C++ 标准),它可能无法识别传入的临时对象的意图。

标签: c++ stl initialization list-initialization


【解决方案1】:

{"a", 1} 是一个 braced-init-list,当被传递给函数时,copy-list-initialization(在 C++11 中引入)被执行。

function( { arg1, arg2, ... } )   (7)

7) 在函数调用表达式中,使用花括号初始化列表作为 参数和列表初始化初始化函数参数

给定map&lt;string, int&gt; m;m.insert({"a", 1});std::map::insert 期望std::pair&lt;const string, int&gt;;因此{"a", 1} 用于初始化一个临时的std::pair,它被传递给.insert()。临时的std::pair 由它的constructor 初始化;将其成员 first 初始化为 "a"second 初始化为 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多