虚函数调用的性能作为for循环中的上限

时间:2017-08-19 14:39:38

标签: c++ performance

我有一个类的例子,它定义了一个函数run,它依赖于对虚函数get_vars的调用(我想到了行for (auto int_vars_it : get_vars()) ...)。

我的问题是:我的示例的性能是否因为我在get_vars() - 循环的上限使用for的调用而减慢了?我担心该函数被调用每个循环实例,如果循环运行多次,可能会降低性能。

#include <iostream>

class Bas
{
  protected:
    using vars_type = std::vector<std::string>;

  private:
    vars_type vars_Base;

  protected:
    virtual vars_type &get_vars()
    {
        return vars_Base;
    }

  public:
    void push_back(const std::string &str)
    {
        get_vars().push_back(str);
    }

    void run()
    {
        for (auto int_vars_it : get_vars())
        {
            std::cout << int_vars_it << " ";
        }
    }
};


int main()
{
    Bas b;
    b.push_back("aB");
    b.run();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

只会调用一次并返回对std::vector的引用。在那之后,它将在某个时刻迭代矢量的内容,这些内容将被转换为经典的for循环。