【问题标题】:Default value for the reference variable [duplicate]参考变量的默认值 [重复]
【发布时间】:2016-11-11 22:58:27
【问题描述】:

当我在 C++ 中用作函数的参数时,如何设置引用变量的默认值?

【问题讨论】:

  • 这毫无意义。重新思考您的设计。
  • 你不能作为参考,但你可以作为对常量的参考,例如const double&。如果您不能拥有 const 变量,因为您应该更改它,那么也许您应该考虑返回该值?
  • 你不能用非常量引用来做到这一点。 d1内部需要修改test()吗?
  • 提供一个额外的重载:void test(int j) { double d1 = 0.0; test(j, d1); },并在两个参数版本中丢失默认值。

标签: c++ function


【解决方案1】:

除非您使用移动运算符或const 引用,否则无法提供对临时值的引用:

void test (int j, double && d1=0.0)
                      // ^^ Move
{
 //my codes
}

void test (int j, const double & d1=0.0)
               // ^^^^^ Extend lifetime
{
 //my codes
}

您为此函数声明了一个引用(输出)参数这一事实表明,如果不传递输出参数,该函数就没有意义,因此默认值完全关闭(调用test(j); 实际上应该做什么? )。

您的意思可能是在输入函数时重置输出参数:

void test (int j, double & d1) {
 d1 = 0.0; // << Assure a certain output
 //my codes
}

【讨论】:

  • @SaeidMo7 那么,你想在 // my codes 部分实现什么?
  • 为什么不 "by 'return'"???
  • @SaeidMo7 您可能过于简化了您的示例。尝试在您的问题中详细说明您的实际用例,并提供minimal reproducible example。
  • @πάνταῥεῖ 除了我的引用值不是简单的内置类型之外,您关于将输入引用设为const 的答案将适用于我的情况。这对于任何通用类型T 将如何工作?执行const T &amp;var = 0 会引发错误:An rvalue expression of type "int" cannot be converted to type "const T &amp;".
【解决方案2】:

您只能为const &amp; 执行此操作,而不能为非 const 执行此操作。 const 引用可以绑定到临时的,非 const 引用不能。

【讨论】:

  • 我想在函数中改变d1的值,所以const & 不起作用。
  • 那么你需要重新考虑你的设计。
  • @SaeidMo7 你没有改变d1 的“价值”。它是一个参考,因此您想更改它所引用的值,但这只有在确实有要参考的东西时才合理,而在您的默认情况下没有。因此,设计 = 损坏。
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多