c++ - BOOST_FOREACH 隐式使用引用?

标签 c++ boost reference foreach

我想知道在调用之前获取对 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/

相关文章:

c++ - "Want Speed? Pass by value"有多真实

c++ - atoi 与整数和 double

c++ - 素数600万以上

c++ - 为什么在 GCC/C++ 中弹出 "pragma GCC diagnostic push"警告?

c++ - 类型转换 shared_ptr 的容器

c++ - 如何在Linux上构建Boost.Beast?该库位于 github 上,但要到 12 月才会包含在 Boost 中

c++ - 获取考虑 DST 的时差

c# - 获取 "type or namespace name could not be found"但一切似乎都正常?

c# - 如何通过 *.csproject 文件查找引用路径

c++ - 在 C++ 中更改引用