【发布时间】:2013-08-29 13:02:59
【问题描述】:
我写了一些代码,突然想到我正在做的事情可能是一个非常糟糕的主意。这是一个抽象的例子。关键是向量的引用传递。
// vector.hpp
class vector {
vector(double x, double y, double z);
}
// particle.hpp
class particle {
particle(const vector& _init_position);
vector m_position;
}
所以我写了一些代码来表示一个class vector,其中包含3D向量的东西,还写了一个粒子类,它的位置向量可以用构造函数和向量实例初始化。
在我的main() 函数中,我使用了一个临时对象来初始化粒子对象,如下所示:
int main() {
particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}
这里可以看到创建了一个临时的vector实例,我假设它是放在栈上某处,然后调用了particle的构造函数。
这可以吗,还是它是一个非常糟糕的代码示例?我怀疑是后者,因为我是通过引用传递的,因此临时向量的实例可能无效?
希望有人能澄清一下吗?
【问题讨论】:
-
你应该阅读 rval 参考资料
-
完全没问题。无时无刻不在发生。例如,每当您将
"Hello"传递给采用const std::string&的函数时 -
@IgorTandetnik Argh,应该想到那个例子!
标签: c++ vector initialization object-initializers temporary-objects