【问题标题】:const reference parameter with default value具有默认值的 const 引用参数
【发布时间】:2021-07-13 14:31:09
【问题描述】:

我有一个带有构造函数的类,该构造函数将另一个结构作为参数,并且具有默认值。像这样的:

class A
{
public:
A(someStruct st = someStruct::defaultStruct());
};

我在我的代码上运行了一个静态分析器,它说这个参数应该是 const ref。但它有点 ref 到一个临时的,虽然我将它的副本作为构造函数,但我仍然很困惑我是否应该这样做 const ref。

someStruct::defaultStruct() 类似于

static someStruct someStruct::defaultStruct()
{
    return { 0, 0 };
}

【问题讨论】:

  • 取决于someStruct。 (大小,简单的复制/析构函数)?
  • @Jarod42 someStruct 没有对应的构造函数和 d-tor,它的字段很少,包括其他带有简单构造函数的模板结构,也没有 d-tor 和其他
  • 你的问题是什么?
  • 相关:pass-by-value-or-const-reference。默认参数无关紧要。
  • @eerorika 我担心在这种情况下引用临时文件。虽然它不会超出范围,稍后在我的 c-tor 中我会复制它,但它是否可能有缺点,或者它可能只是一种糟糕的糟糕风格,比如使用 goto,例如。跨度>

标签: c++ c++11 reference static default-value


【解决方案1】:

分析器说它必须是const&,因为someStruct::defaultStruct() 返回一个临时值。你需要这样的代码:

A(const someStruct& st = someStruct::defaultStruct());

因为只有 const& 可以绑定到临时作为参数的默认值。

【讨论】:

  • @Jarod42 不,不是。他说他的 analyzer 这么说,而不是编译器。但总的来说,代码应该是这样的。
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2020-02-28
  • 2011-01-06
  • 2014-03-09
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多