我有以下类定义:

class foo {
  private:
    bool m_active;

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

  2. 在哪里可以阅读有关const getter和setter的信息? 我需要深入了解在何处以及为什么使用这些方法。

===============>>#1 票数:6

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

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

  ask by Igor Popov translate from so

未解决问题?本站智能推荐:

4回复

生产编译器如何在流控制上实现析构函数处理

长话短说 - 我正在编写一个编译器,并且达到了OOP功能,我面临着涉及处理析构函数的两难问题。 基本上我有两个选择: 1 - 将所有析构函数放在程序中该点需要调用的对象上。 这个选项听起来像是性能友好且简单但会使代码膨胀,因为根据控制流程,某些析构函数可以多次复制。 2 -
3回复

OOP访问修饰符:编译时或运行时

我听说Access Modifiers Public, Private and Protected只是一些Compiler Stuff,它们实际上并不存在于已编译的二进制代码中 。 现在我想知道它是多少是正确的? 如果它是正确的,是否意味着在运行时二进制代码中不存在封装 ? 因此,如果
1回复

不是编译器优化C ++中的代码部分

有没有办法告诉编译器不优化代码的选择部分? 我知道你可以告诉编译器不要使用volatile来优化某些变量但是整个代码块呢?
4回复

我的C ++编译器是否优化了我的代码?

在使用现代C ++编译器(包括MSVC,GCC,ICC)时,我怎么说它是否有: 并行化代码 矢量化循环(或使用其他特定的处理器指令) 展开循环 检测到尾递归 执行RVO(返回值优化) 或以其他方式优化 没有深入编译器产生的汇编代码?
3回复

编译器中的控制反转

有没有人在编译器实现中实际使用过控制容器的转换? 我知道从设计上来说,编译器需要非常快,但是我一直对IoC / DI如何影响编程语言(热插拔语法)的构造感到好奇。
9回复

是否有更现代的OO版“让我们构建一个编译器”? [关闭]

是否有更现代的,可能是面向对象的,相当于Jack Crenshaw的“ Let's Build a Compiler ”系列? 不久前,我偶然发现了“ 让我们构建一个编译器 ”,并且无法抗拒编写一些代码。 我在C#中编写了一个递归下降的C编译器,输出.NET CIL。 “写一次,到处泄
12回复

C ++中的常量和编译器优化

我已经阅读了关于C ++中const-correctness的所有建议,并且它(部分)很重要,因为它有助于编译器优化代码。 我从未见过的是关于编译器如何使用这些信息来优化代码的一个很好的解释,甚至连好书都没有解释幕后发生的事情。 例如,编译器如何优化声明为const的方法与不应该但应该是
1回复

编译器如何编译虚拟/重写方法

我正在开发针对面向对象语言的编译器,该语言针对我编写的虚拟机,我将其用作跨平台抽象层。 我对继承方法的工作方式感到困惑。 可以说我有以下几行C#代码。 现在这将输出'Dis be mah object'。 如果我调用regularMethod,但编译后的代码实际上会执行以下操作:
1回复

构建编译器面向对象

我正在为我班上的一个项目工作。 我正在使用Flex(lex)和Bison(YACC)和C构建编译器。我只做了一些语义分析,但我一直在思考如何实现面向对象的部分。 也就是说,我如何处理类,重载,多态和遗产。 我似乎无法在谷歌上发现一些有用的东西,而龙书的水平太低了。 我的意思是过于专注
1回复

OOP语言的编译器设计差异

我正在研究OOP语言的编译器设计与传统命令式语言有何不同。 我希望一些话题可以带我上路,如果您愿意,可以向他们解释。 例如。 我发现类型表的构建方式有所不同。