【问题标题】:Use initializer list as default value for function/method parameter使用初始化列表作为函数/方法参数的默认值
【发布时间】:2021-11-27 13:16:47
【问题描述】:

我想做类似的事情

void A (int a[2] = {0,0}) {}

但我明白了

<source>(1): error C2440: 'default argument': cannot convert from 'initializer list' to 'int []'
<source>(1): note: The initializer contains too many elements

(MSVC v19 x64 最新,也不适用于 gcc x86-64 11.2)

再一次,我想不出这里的正确语法是什么 c++ 能力。

【问题讨论】:

    标签: c++ default-value method-parameters


    【解决方案1】:

    此外,您可以通过 const 引用传递原始数组:

    void A(const int (&arr)[2] = {2, 2})
    {}
    

    【讨论】:

      【解决方案2】:

      这不起作用的原因是这个

      void A (int a[2]) {}
      

      只是简写

      void A (int* a) {}
      

      您不能将数组按值传递给函数。它们确实衰减到指向第一个元素的指针。如果您使用std::array&lt;int,2&gt;,您可以轻松提供默认参数:

      void foo(std::array<int,2> x = {2,2}) {}
      

      【讨论】:

        猜你喜欢
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        • 2011-05-13
        • 2014-05-06
        • 2021-10-17
        • 2014-12-26
        相关资源
        最近更新 更多