Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器是否优化了这部分代码(const getter)?_C++_Oop_Compiler Construction - Fatal编程技术网

C++ 编译器是否优化了这部分代码(const getter)?

C++ 编译器是否优化了这部分代码(const getter)?,c++,oop,compiler-construction,C++,Oop,Compiler Construction,我有以下类定义: class foo { private: bool m_active; public: const bool isActive() const // (btw do I need return type `const bool&` here?) { return m_active; } }; 具有constgetter(foo->isActive())的类是否比foo->m\u active的类工作得更快(如

我有以下类定义:

class foo {
  private:
    bool m_active;

  public:
    const bool isActive() const // (btw do I need return type `const bool&` here?)
    {
       return m_active;
    }  
};
  • 具有
    const
    getter(
    foo->isActive()
    )的类是否比
    foo->m\u active
    的类工作得更快(如果它是公共的)?我试图查看反汇编代码,但没有发现任何有趣的东西

  • 我在哪里可以阅读有关
    const
    getter和setter的信息?我需要深入了解这些方法的使用地点和原因


  • 默认情况下,函数内联将考虑所有成员函数。这意味着编译器将优化整个函数调用,并将其替换为直接访问成员


    所以答案是肯定的。编译器将对其进行优化。

    假设相关优化已启用。。。编译器通常默认不进行优化,但我不知道IDE。@MarkB:任何现代编译器都支持整个程序优化。是的,因此我添加了“考虑”,因为有一大堆原因可能会阻止函数内联。(递归、大型体、多态等)但在简单的getter和setter上下文中,它们几乎总是与相关的优化进行内联。我发现有趣的是,您声明所有成员函数都被考虑用于函数内联,或者您的意思是所有函数都被考虑用于内联(GMan状态下的整个程序优化)或者,在类定义中定义的所有成员都隐式内联的行中,描述中缺少了一些内容。我记不清在哪里读到它,成员函数是指类中定义的函数。在GCC和VC++上,如果将优化级别设置为max
    -O3
    /Oy所有内容(不仅仅是成员函数)被考虑用于内联-带或不带
    inline
    修饰符。您想解决什么问题?哦,返回对bool的引用永远不会比只按值返回bool更快。这是一种很小的类型。对于第二个问题:
    const
    setter有什么意义?setter应该更改值一个成员变量,使其本质上是非常量的。您需要什么样的深入理解?