默认参数的默认构造

Default construction for default parameters

前提:我懒。而且我不喜欢排长队。

假设您有一个接受一个参数的函数,并且您想要为该参数指定一个默认值。假设参数是 std::map,默认值只是一个空映射。方法是

void foo (std::map<Key,Value> the_map = std::map<Key,Value>());

现在,如果 Key and/or Value 的名称很长(可能是模板化的),函数声明就会变长。如果有办法写类似

的东西就好了
void foo (std::map<Key,Value> the_map = auto);

现在,我知道这不是关键字 auto 的用途,而只是为了解释这个概念:我不想仅仅因为有写下一个简单的默认构造的默认元素。我只想告诉编译器"look, build a default one there"。有没有办法做到这一点?还有,有没有人也觉得有这个必要?

注意:是的,我可以键入定义地图类型并使用短名称。但我想要一种不同的方式。 注 2:是的,我也可以重载该函数,这样它的一个版本不带参数而另一个版本带参数。但我想要一个不同的方式。

我想我要找的是 "default default parameter"...

您可以使用 {} 作为 初始化器子句 ,这将对参数进行值初始化。

void foo(std::map<K, V> the_map = {});