3 回答
TA贡献1844条经验 获得超8个赞
2)如果正确,那为什么呢?我找不到为什么会允许使用它,或者可能是为了帮助在模板中使用“静态或非静态”方法?
在以下几种情况下可能很有用:
[建议使用“模板中的“静态或非静态”方法“:]当可以为模板指定许多类型,然后该模板想要调用成员时:可以使用相同的符号来调用提供静态函数的类型。作为成员函数-前者可能更有效(没有
this
指向通过/绑定的指针),而后者允许多态(virtual
)调度和成员数据的使用减少代码维护
如果功能从需要实例的数据演变为不需要的数据-因此
static
可以轻松实现无实例使用并防止实例数据的意外使用-无需费力地更新现有客户端使用的所有方面如果更改了类型,则
var.f()
调用将继续使用该var
类型的函数,而Type::f()
可能需要手动更正当您有一个表达式或函数调用返回一个值并想调用(可能或始终)
static
函数时,该.
表示法可能会阻止您需要使用decltype
或支持模板来访问该类型,因此您可以使用该::
表示法有时,变量名会更短,更方便或以更易于记录的方式命名
TA贡献2011条经验 获得超2个赞
该标准指出,不必通过实例调用该方法,这并不意味着您不能执行该方法。甚至有一个使用它的示例:
C ++ 03,9.4静态成员
可以使用限定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
}
TA贡献1820条经验 获得超2个赞
静态函数不需要实例化的对象即可调用,因此
k.DoCrash();
行为与
Test::DoCrash();
使用范围解析运算符(::)确定类内部的静态函数。
注意,在这两种情况下,编译器都不会将this指针放在堆栈中,因为静态函数不需要它。
- 3 回答
- 0 关注
- 557 浏览
添加回答
举报