【问题标题】:the position of the *static* keyword in member method declaration*static* 关键字在成员方法声明中的位置
【发布时间】:2013-04-19 14:19:36
【问题描述】:

有什么区别

class C {
    static int func();
};

class C {
    int static func();
};

我正在尝试删除其他人代码库中的关键字 static。在我这样做之前,我想确保我理解第二个示例的含义。

[编辑] 删除static的原因:C 是一个没有成员变量且充满静态方法的“类”。我认为将“C”作为具有普通函数而不是类的命名空间更合适。

【问题讨论】:

  • 你为什么要删除它?
  • 因为 C 是一个没有成员变量且充满静态方法的“类”。我认为将“C”作为命名空间而不是类更合适。我说的对吗?
  • 这确实是惯用的 C++ 方法。最初的编码员可能是 Java 开发人员(他们没有namespace)。
  • @user2207811:你可以找到会倒下的人。使用类强制对调用的函数进行限定,并避免与未限定函数的潜在冲突。
  • @DavidRodríguez-dribeas:我们不要忘记类可以用作模板参数,而命名空间不能。

标签: c++


【解决方案1】:

没有区别。函数声明上的static 适用于函数。
this 指针不会被隐式传递给这个函数,所以你不能在没有显式传递对象的情况下访问这个函数内部的非静态类成员。

首先要删除static,您应该知道并理解它以这种方式设计的目的。如果不考虑这一点,您肯定会产生很大比例的代码气味。

【讨论】:

  • static int iint static i 之间有什么区别吗?
  • 请在问题下查看我的评论。我认为我在做正确的事
  • @RasmiRanjanNayak:没有,除了让维护它的人感到困惑。
  • @user2207811:如果你有一个没有数据成员而只有static函数的类,你最好使用Unnamed namespace
  • @Alok:不,unnamed 命名空间是一个糟糕的解决方案。可以从多个编译单元访问一个类。命名空间也是如此。
【解决方案2】:

是的,在第一种情况下,关键字static 出现在类型int 之前,在第二种情况下,它们是相反的。但是,就像 C 和 C++ 中的许多东西一样,没有语义差异。因此,除了“化妆品”之外,没有任何区别。

我不确定您为什么要作为一般规则删除类中的static - 声明成员函数static 可能是有充分理由的。

【讨论】:

  • 所以你对“有区别吗?”的回答是“是”吗?
猜你喜欢
  • 2013-10-07
  • 1970-01-01
  • 2014-08-05
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多