我想知道在调用之前获取对 vector 的引用是否有任何好处 BOOST_FOREACH 或返回引用的方法调用是否会被自动使用?例如,以下两个循环中的哪一个将等同于第三个循环?
vector<float>& my_method();
void main()
{
// LOOP 1 -------------------------------
vector<float>& temp_vector = my_method();
BOOST_FOREACH(float element, temp_vector)
cout << element << endl;
// LOOP 2 -------------------------------
vector<float> temp_vector = my_method();
BOOST_FOREACH(float element, temp_vector)
cout << element << endl;
// Which loop is this one most like? ----
BOOST_FOREACH(float element, my_method())
cout << element << endl;
}
最佳答案
快速测试表明该函数被调用一次,并且没有发生与 BOOST_FOREACH
相关的复制。
#include <vector>
#include <iostream>
#include <boost/foreach.hpp>
struct X
{
X() {}
X(const X& ) { std::cout << "copied\n"; }
};
std::vector<X> vec(2);
//std::vector<X> method()
std::vector<X>& method()
{
std::cout << "returning from method\n";
return vec;
}
int main()
{
BOOST_FOREACH(const X& x, method()) {}
}
关于c++ - BOOST_FOREACH 隐式使用引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361750/