【问题标题】:Building objects while passing them as const reference C++在将对象作为 const 引用 C++ 传递时构建对象
【发布时间】:2017-02-03 14:14:27
【问题描述】:

我可以在方法调用中构建参数 const 引用吗? 我知道它可以编译,但并不完全确信它在运行时是正确的。

我有以下课程:

class A{
public:
void doThings(const B& b);
}

class B{
   B(int i, int j);

}


int main{

    A a;

    a.doThings(B(1,2));   //Is this OK?

}

【问题讨论】:

  • 你认为会出现什么错误?
  • 你的代码肯定不能编译。
  • 是的,您可以在方法/函数中使用对临时对象的 const 引用,但是您不能存储指向它的指针或在另一个线程中使用它,并且编译器不会保护您免受它的影响.

标签: c++ constructor reference constants


【解决方案1】:

概念很好...一个临时的B 将被构造并通过引用传递。不要将该引用存储在 A 中或使用超出 doThings 范围的任何地方。

但是你的代码不好。在这里,我为你修好了:

class B;

class A {
public:
  void doThings(const B& b) {}
};

class B {
public:
  B(int i, int j) {}
};


int main() {

  A a;

  a.doThings(B(1, 2));   //Is this OK?

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2013-11-24
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2019-12-12
    • 2013-04-22
    相关资源
    最近更新 更多