В стандарте говорится, что не необходимо назвать метод через экземпляр, который не означает, что Вы не можете сделать этого. Существует даже пример, где он используется:
C++ 03, 9,4 статических участников
А статический участник s класса X может быть отнесен в использование выражения X квалифицированного идентификатора:: s; не необходимо использовать членский синтаксис доступа класса (5.2.5), чтобы относиться к статическому участнику. Статический участник может быть отнесен в использование членского синтаксиса доступа класса, в этом случае объектное выражение оценено.
class process {
public:
static void reschedule();
};
process& g();
void f()
{
process::reschedule(); // OK: no object necessary
g().reschedule(); // g() is called
}
Для статических функций doesnВґt нужен объект instanciated для того, чтобы быть названными, таким образом
k.DoCrash();
ведет себя точно то же как
Test::DoCrash();
использование оператора разрешения области видимости (::) определить статическую функцию в классе.
Уведомление, которые в оба заключают компилятор в корпус doesnВґt, поместило this
указатель в стеке, так как для статической функции не нужен он.
статические методы можно назвать также с помощью объекта класса, точно так же, как он может быть сделан в Java. Тем не менее, Вы не должны делать этого. Используйте оператор объема как Test::DoCrash();
, Возможно, Вы думаете о пространствах имен:
namespace Test {
void DoCrash() {
std::cout << "Crashed!!" << std::endl;
}
};
, который можно только назвать Test::DoCrash();
снаружи того пространства имен, если функция не импортируется явно с помощью using directive/declaration
в объем вызывающей стороны.