问题描述
假设我有一个数组 B
已经已经定义,并在C ++ code的地方使用。现在,假设我有另一个数组 A
已被定义并初始化。我想创建一个函数˚F
的变换 A
(例如,FFT)和我想要的结果改造被分配到
(当然B, A
,的改造下乙
将改变其值)。我想保持语法做的一切,
Suppose I have an array B
that has been already defined and used somewhere in a C++ code. Now, suppose that I have another array A
that has been defined and initialized. I want to create a function f
that transforms A
(for example, an FFT) and I want that the result of the transformation is assigned to B
(of course, following the transformation of A
, B
will change its values). I want to do all that by keeping the syntax
B=f(A);
,即没有通过 B
的地址作为参数传递给˚F
。它是可能的:
namely, without passing the address of B
as an argument to f
. Is it possible:
- 没有创建临时的?
- 在创建临时的,但是没有内存泄漏?
感谢您。
编辑:提供了以下解答在解决方案概述
由于RIAD,詹姆斯甘孜,沙赫巴兹和Razispio了他们的答案。
Thanks to RiaD, James Kanze, Shahbaz and Razispio for their answers.
我要问,需要 A
和 B
来是为了提高效率数组类的对象和有效性。此外,在标准的实施,例如,用装有复制构造一个数组类,如 B = F(A)语法;
将需要临时创建。然而,应当提到的是临时不一定是限制,因为许多编译器将能够的Elid额外临时。与此相反,如语法F(A,B);
将避免临时。使用的前pression模板的该解决方案使语法 B = F(A);而内部使用
F( A,B);
,使得使用的临时忽略不计的。一种有效的替代解决方案是使用移动赋值操作符,例如见
What I'm asking requires A
and B
to be objects of an array class in order to gain efficiency and effectiveness. Also, in a "standard" implementation, e.g., with an array class equipped with a copy constructor, a syntax like B=f(A);
would require the creation of temporaries. It should be however mentioned that temporaries are not necessarily a limitation, since many compilers would be able to elide the extra temporaries. Opposite to this, a syntax like f(A,B);
would avoid temporaries. The solution using expression templates enables the syntax B=f(A);
while internally using f(A,B);
, making the use of temporaries negligible. An efficient alternative solution would be using move assignment operators, see for example
右值引用
有关详细信息,请参阅答案好心如下。
For details, see the answers kindly provided below.
推荐答案
它使用的std ::矢量
或的std ::最简单的方法阵列
例如:
vector<int> f(const vector<int>& a) {
return a;
}
b = f(a);
其实,你不必使用这个类的一个存储,您可以使用自己的类,有运算符=
YourClass& operator = (const vector<int>&/* there will be returned value of f, it may be std::array, std::vector or your own class.*/ v) {
//fill it here.
return *this;
}
您也可以提供移动构造,以避免不必要的复制。
You may also provide move constructor for it to avoid unnecessary copying.
例如:
class Array {
int* data;
YourClass& operator = (YourClass&& v) {
swap(v.data, data);
}
}
YourClass f(const YourClass& a) {
//
}
Array a,b;
b = f(a);
这篇关于实施B = F(A),与已经定义B和A阵列和B的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!