Calling Static Member Methods on Class Instances in C
The question arises regarding the validity of calling static member methods on class instances in C . Static member methods are typically invoked through the class name, but the code snippet below seems to contradict this convention:
class Test { public: static void DoCrash() { std::cout << "TEST IT!" << std::endl; } }; int main() { Test k; k.DoCrash(); }
Question:
Answer:
While static member methods conventionally are called through the class name, the C standard allows them to be invoked on class instances. This is evident from the following section in the C 03 standard:
"A static member s of class X may be referred to using the qualified-id expression X::s; it is not necessary to use the class member access syntax (5.2.5) to refer to a static member. A static member may be referred to using the class member access syntax, in which case the object-expression is evaluated."
This means that calling a static member method via class instance syntax is not just allowed but also has a different semantic. In such cases, the object-expression is evaluated, which potentially offers benefits in the context of generic programming.
Example:
The following code demonstrates how static member methods can be used with both class name and instance syntax:
class Process { public: static void Reschedule() { /* ... */ } }; int main() { Process::Reschedule(); // Using class name syntax Process p; p.Reschedule(); // Using instance syntax }
The above is the detailed content of Can Static Member Methods Be Called on Class Instances in C ?. For more information, please follow other related articles on the PHP Chinese website!