Kla*_*aim 38 c++ standards visual-c++
这是一个小测试程序:
#include <iostream>
class Test
{
public:
static void DoCrash(){ std::cout<< "TEST IT!"<< std::endl; }
};
int main()
{
Test k;
k.DoCrash(); // calling a static method like a member method...
std::system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在VS2008 + SP1(vc9)上编译很好:控制台只显示"TEST IT!".
据我所知,不应该在instanced对象上调用静态成员方法.
Dav*_*eas 63
标准规定没有必要通过实例调用方法,这并不意味着你不能这样做.甚至有一个使用它的例子:
C++ 03,9.4静态成员
可以使用qualified-id表达式X :: s来引用类X的静态成员; 没有必要使用类成员访问语法(5.2.5)来引用静态成员.可以使用类成员访问语法来引用静态成员,在这种情况下,评估对象表达式.
class process {
public:
static void reschedule();
};
process& g();
void f()
{
process::reschedule(); // OK: no object necessary
g().reschedule(); // g() is called
}
Run Code Online (Sandbox Code Playgroud)
jab*_*jab 12
静态函数不需要一个实例化的对象来被调用,所以
k.DoCrash();
Run Code Online (Sandbox Code Playgroud)
表现完全相同
Test::DoCrash();
Run Code Online (Sandbox Code Playgroud)
使用范围解析运算符(::)来确定类中的静态函数.
请注意,在这两种情况下,编译器都不会将this指针放在堆栈中,因为静态函数不需要它.
| 归档时间: |
|
| 查看次数: |
63145 次 |
| 最近记录: |