当前位置:  开发笔记 > 编程语言 > 正文

C++静态成员方法调用类实例

如何解决《C++静态成员方法调用类实例》经验,为你挑选了2个好方法。

这是一个小测试程序:

#include 

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;
}

在VS2008 + SP1(vc9)上编译很好:控制台只显示"TEST IT!".

据我所知,不应该在instanced对象上调用静态成员方法.

    我错了吗?从标准角度来看,这段代码是否正确?

    如果它是正确的,那为什么?我找不到为什么会被允许,或者可能是为了帮助在模板中使用"静态或非"方法?

David Rodríg.. 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
}


jab.. 12

静态函数不需要一个实例化的对象来被调用,所以

k.DoCrash();

表现完全相同

Test::DoCrash();

使用范围解析运算符(::)来确定类中的静态函数.

请注意,在这两种情况下,编译器都不会将this指针放在堆栈中,因为静态函数不需要它.



1> David Rodríg..:

标准规定没有必要通过实例调用方法,这并不意味着你不能这样做.甚至有一个使用它的例子:

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
}



2> jab..:

静态函数不需要一个实例化的对象来被调用,所以

k.DoCrash();

表现完全相同

Test::DoCrash();

使用范围解析运算符(::)来确定类中的静态函数.

请注意,在这两种情况下,编译器都不会将this指针放在堆栈中,因为静态函数不需要它.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有