4 ms·
There are three different meanings for the static keyword. It's a real pain.
- cema 16y agoNo pain, it is simply reused.
- KeithMajhor 16y agoAs far as I know, a language with less keywords lends itself to a faster parser. That's the motivation behind using "auto" for type inference in C++0x, "auto" is already a keyword.
- pbhogan 16y agoThe difference is negligible. Complexity of grammar (not the same thing) is probably the big cost factor. The big thing there is usually ambiguity of a statement within a single context that has to be resolved. Static is not such a case because there are three distinct contexts. But when a parser has to read many tokens ahead just to figure out where you're going with a term, that's what slows things down.
- zeteo 16y agoIt's somewhat ungainly, but one way to think about this is that "static" means "it stays here". In a function: the value of the variable stays with the function, i.e. it doesn't change between calls. In a class: the value of the variable stays with the class, i.e. it doesn't change with the creation of new objects. In a file: the value of the variable stays within the file, i.e. it can't be changed (or seen) from outside the file.
- jpr 16y agoIf this is "real pain", I wonder what some of the weirder stuff of C++ would be, "surreal pain"?
- pbhogan 16y agoIndeed. This is mild. I've never been confused by a static keyword. Now some templates, on the other hand, seem to be from another dimension.
- pbhogan 16y agoAt least the third meaning is deprecated in favor of anonymous namespaces. The other two are essentially the same just within class or function scope. Of course, they're essentially just global state of a sort, but they sure do come in useful at times.
- LiteOn 16y agoI don't see the problem. It shares the variable across all instances of the current scope.