是否允许编译器内联它,知道只有同一个类中的函数才能访问它?或者只是为了程序员的方便?
答案 0 :(得分:6)
编译器可以(但不是必须)按照您的建议进行优化,但那不是点。访问修饰符的目的是在编译时捕获编程错误的某些类(没有双关语)。私有函数是这样的函数,如果有人从类外部调用它们,那将是 bug ,并且您希望尽早了解它。
(每当你提出这个问题时“编译器可以根据这些信息进行优化”,答案是肯定的,除非标准中有一条特定的规则说明它不允许“(例如volatile
的规则,其目的是禁止优化。但是,编译器不一定会根据任何给定的信息进行麻烦优化。毕竟,对编译器没有要求首先进行任何优化!现在,你的编译器多么聪明,很大程度上取决于你愿意让它运行多长时间; MSVC的整个程序PGO模式能够通过虚拟方法调度来内联 - 它猜测最可能的目标,并且如果猜测错误则在运行时回退到常规虚拟调用 - 但是将编译速度降低至少两倍。)
答案 1 :(得分:4)
访问说明符是C ++机制的一部分,用于实现封装和抽象的OOP原则,而不是编译器的优化。
一些智能编译器可以通过它实现一些优化,但C ++标准并没有强制执行。访问说明符的目的不是优化,而是为了促进C ++语言支持的原则的语言结构。