当前位置: 首页 > 知识库问答 >
问题:

模板空括号初始化扣除

衡丰茂
2023-03-14

我认为模板函数可以有默认的参数参数(不是模板参数而是运行时参数)。我们也可以用空括号初始化来初始化一个类。但是编译器如何匹配模板呢?

这段代码为什么要编译,编译器如何进行演绎,以及这个函数调用示例中的参数是什么?

我所理解的是:默认括号初始化调用空构造函数,这是隐式创建的,因为没有用户定义的构造函数或用户定义的默认构造函数。也就是说,我们可以用{}初始化任何包。所以扣除不适用于那里,因为我们不能选择一个包,每个包都是候选人。也许默认变量模板参数是

    template<typename...> class pack {};

    template<class... Args>
    inline auto make(pack<Args...> = {}) {

    }

    int main() { make(); }

(使用GCC编译)注意:我认为不是,但默认参数可能很有用:调用函数的两种方法:make

共有1个答案

仲孙飞文
2023-03-14

给定make(),导出的参数为空<代码>生成() make具有相同的效果

模板参数是一个参数包,这里不提供模板参数。请注意,函数默认参数不参与模板参数推导。然后Args被推导为空。

如果参数包显示为最后一个P,则类型P与调用的每个剩余参数的类型a相匹配。每个匹配项都会推断包扩展中下一个位置的模板参数:

类型模板参数不能从函数默认参数的类型推导:

 类似资料:
  • 问题内容: 在Java的“ 隐藏功能”中,最常见的答案是,其语法非常诱人: 此成语创建一个匿名内部类,其中仅包含一个实例初始化程序,该实例“可以使用包含范围内的任何方法”。 主要问题:这听起来像效率低下吗?它的使用是否应仅限于一次性初始化?(当然还有炫耀!) 第二个问题:新的HashSet必须是实例初始化程序中使用的“ this”……任何人都可以阐明该机制吗? 第三个问题:这个习惯用法是否太晦涩,

  • 我甚至知道这在C++11标准中有什么规定:14.8.2.5/5子弹5: [如果程序有]一个函数参数,该函数参数的关联参数是初始值设定项列表(8.5.4),但该参数没有std::initializer_list或可能引用CV限定的std::initializer_list类型。[示例: 模板空隙g(T);

  • Java中的双大括号初始化语法()是什么?

  • 我试图为我的模板创建一个覆盖,以自定义扩展在文章中显示其字段的方式。 我使用的扩展是DPfields,我使用的是开发人员提供的参考指南:https://joomla.digital-peak.com/documentation/162-dpfields/2750-rendering-fields 特别是我提到的段落:访问布局中的字段 我已经创建了一个新的php文件从default.php文件开始的

  • 问题内容: 我正在尝试为模板创建模板,如下所示: 我想保留三括号,但是将双括号替换为传入的JSON。任何人都知道无需编写后处理JS代码即可做到这一点的最佳方法,如果没有,那么是否有一个不错的nodeJS模板引擎可用于此场景类型? 问题答案: 您可以将定界符切换到与三重胡须不冲突的位置,例如erb样式的标签: 请注意,您可以在整个模板中执行任意多次。任何时候遇到冲突时,请选择一组新的定界符:)

  • 问题内容: 通常,我将初始化一个类似的结构: 但是,我最近看到了用括号初始化的代码: 返回相同的名称。 括号中的内容起什么作用?何时首选? 这是一些Go代码可以尝试一下: 游乐场:https : //play.golang.org/p/_gsaruS_DVi 问题答案: 没什么特别的,那两行是相同的。 但是,例如,当您要在语句中使用它时,将需要使用括号,否则会出现编译时错误: 结果是: 预期的布尔