Does it allow the compiler to inline it, knowing that only functions in the same class can access it? Or is it only for the programmer’s convenience?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The compiler can (but is not required to) optimize as you suggest, but that’s not the point. The point of access modifiers is to catch certain classes (no pun intended) of programming errors at compile time. Private functions are functions that, if someone called them from outside the class, that would be a bug, and you want to know about it as early as possible.
(Any time you ask the question “could the compiler make optimizations based on this information available to it”, the answer is “yes, unless there’s a specific rule in the standard that says it’s not allowed to” (such as the rules for
volatile, whose entire purpose is to inhibit optimizations). However, compilers do not necessarily bother optimizing based on any given piece of information. There is, after all, no requirement for compilers to do any optimization in the first place! How clever your compiler is, nowadays, largely depends on how long you are willing to let it run; MSVC’s whole-program PGO mode is capable of inlining through virtual method dispatch — it guesses the most likely target, and falls back to a regular virtual call at runtime if the guess was wrong — but slows down compiles by at least a factor of two.)