【发布时间】:2012-03-20 18:26:24
【问题描述】:
我正在实现一些类来表示映射(在数学意义上),即 f : R x R^n -> R^n。我想实现一个抽象基类: 1) 将 std::array 作为引用并对其进行修改 要么 2) 返回一个 std::array (按值还是按引用,不确定?)
选项 2 的语法对我来说更可取,因为我认为代码看起来更像我试图表示的数学,但我想确保我不会不必要地复制东西并引发一堆不受欢迎的东西高架。例如,如果我有:
// Function f declaration
std::array<double, 4> f(double t, const std::array<double, 4> & x);
// Some code snippet that uses f
std::array<double, 4> x = {0.0, 1.0, 2.0, 3.0};
double t = 0.0;
std::array<double, 4> dxdt = f(t, x);
如何确定是否在最后一行执行了复制,或者如何确保它不会发生?
在 f() 的定义中,我需要做什么(如果有的话)以确保在不调用复制构造函数的情况下返回 this?我想保持使用简单,这样客户端就不需要使用指针或智能指针,但也许这是必要的?
我知道我可以将其更改为返回 void,只需将参数之一设为 std::array dxdt,但我更喜欢返回值语法,只要没有性能损失或内存泄漏问题。
【问题讨论】:
标签: c++ arrays return-value