c++ - 在新的 C++11 中可以创建可选引用吗?

标签 c++ constructor c++11

鉴于新的 C++11 标准及其中引入的移动语义,是否可以为构造函数引用创建默认值?这里Default value to a parameter while passing by reference in C++据说不行,但也许新标准允许一些技巧。

基本上我想要的是使用默认对象进行正常使用,并传递一个模拟对象来记录主机对象在测试阶段所做的所有调用。应该是这样的

class A {
   B& b;
   public:
       A(B & b = B()){} // This does not work
}

当测试我想要的是

BMock bMock;
A a(bMock);
bMock.getStatistics();

有什么想法吗?

最佳答案

这个怎么样:

class Foo
{
  B default_B;

public:

  std::reference_wrapper<B> b;

  Foo() : b(std::ref(default_B)) { }

  Foo(B & br) b(std::ref(br)) { }
};

这是一个可能更轻量级的替代想法,但以默认情况下的动态分配为代价:

#include <memory>

class Foo
{
  std::unique_ptr<B> pB;

public:

  std::reference_wrapper<B> b;

  Foo() : pb(new B), b(std::ref(*pb)) { }

  Foo(B & br) pb(), b(std::ref(br)) { }
};

关于c++ - 在新的 C++11 中可以创建可选引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301667/

相关文章:

c++ - C++意外调用继承类的函数

javascript - JavaScript 函数可以引用调用它的原型(prototype)链上的原型(prototype)吗?

java - 如何调用内部类构造函数?

c++ - 移动语义 + 对成员的成员变量的引用 - 解决方案和命名法?

c++ - 这段代码的时间复杂度能否进一步降低?

C++ include guard 似乎不起作用?

python - 如何使用嵌入式 python 解释器构建和执行 cpp 文件(pybind11)

c++ - 如何初始化需要执行计算的 const 成员?

java.lang.InstantiationException : can't instantiate class; no empty constructor 异常

c++ - `getopt` 的段错误