【问题标题】:Default arguments C++ for all parameters that exists存在的所有参数的默认参数 C++
【发布时间】:2020-05-07 09:36:11
【问题描述】:

我正在寻找一个代码示例,该示例表明有些参数类型不能用默认参数分配。 我的意思是,我想反驳“您可以为函数中的每个参数定义一个默认参数”的说法,或者,它实际上是真的吗?

【问题讨论】:

  • @RoQuOTriX 对于struct foo {};void test(foo a)a 不能是NULL
  • @t.niese 是的,我意识到,我不明白默认参数的含义:D
  • 您可以创建一个无法构造的类,但这没有多大意义。

标签: c++ parameter-passing default-arguments


【解决方案1】:

这可能太过分了,但您不能为参数包提供默认值:

template <typename... Args>
void foo(Args... = 5) {};  //fails to compile

【讨论】:

    【解决方案2】:

    另一个极端情况是不可构造类,(但函数也不能以常规方式调用):

    struct S{
        S() = delete;
        S(const S&) = delete;
    };
    
    void foo(S = {}); // Wrong
    

    我们可能会尝试使用 pass-key 习惯用法来扩展它的可见性,这确实会禁止在某些地方使用默认参数声明,但我们可以在函数范围内(重新)声明函数(使用默认参数),其中可以创建密钥...

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2022-07-17
      相关资源
      最近更新 更多