【发布时间】:2012-02-08 05:07:25
【问题描述】:
考虑:
//在Vector2.h中
class Vector2
{
public:
// returns the degrees in radians
static double calcDir(double x, double y);
}
//在Vector2.cpp中
double Vector2::calcDir(double x, double y)
{
double rad = ...;
return rad;
}
为什么 Vector2.cpp 的签名中不需要关键字 static?当我尝试这个时,它会产生一个错误:
static double Vector2::calcDir(double x, double y)
这对我来说似乎不一致。方法签名的所有其他部分都需要在 .cpp 文件中重复(返回类型、方法名称(duh)、args 的名称和类型、常量)。我不喜欢一眼就知道方法是否是静态的(在查看实现时)。
这不仅不是必需的,而且是禁止的,有什么原因吗?
【问题讨论】:
-
我认为这属于“因为标准是这样说的”。顺便说一句,
virtual也是如此。 -
virtual也不需要重复。只有参与重载决议(和返回类型)的事情必须重复。 -
@Nathan Ernst:我从来没有意识到标准是自己写的。
-
我不喜欢一眼就知道方法是否是静态的 - 我通过使用不同的情况来避免这种情况:
Static()和instance()跨度> -
我使用 cmets。
/*static*/ class::double blabla()。对于具有默认值的参数也是如此。class:fun x(y = 0)也不允许在定义中,所以我写class::fun x(y /*= 0*/)。
标签: c++ static static-methods