繁体   English   中英

为什么不允许将类成员定义的`static`关键字放在命名空间范围内?

[英]Why is it not allowed to put the `static` keyword for class member definitions in namespace scope?

struct A
{
  static void f();
};

static void A::f() {} //illegal

为什么不允许这样做? 之所以问这个问题,是因为该规则似乎与其他关键字不一致。

您必须在两者上都使用constexpr

您可以在两者上都inline ,但也可以省略其中之一。 您可以在类定义中省略inline ,这很有用,这不是接口的重要信息。

但是,对类成员进行static的规则实际上没有任何意义。 它与constexpr不一致吗?

我知道static意味着名称空间范围函数的内部链接,这部分解释了当前的形状。 但是,难道不是在命名空间范围内没有歧义的自由函数和类成员函数之间进行区分吗? 例如,如果您编写static void A::f() {}则可以肯定的是,如果A是类名,则定义A的成员函数。

static类有其他的含义在全局或命名空间的静态。

当您在类中将symbol声明为static时,您不希望它成为全局static。

1.静态成员

在类中,这意味着符号与类无关,与对象无关,意味着成员变量,所有对象只有一个实例,而对于函数,它不能访问面向对象的非静态成员。

2.静态全局

在全局范围内, static表示对象或函数仅是本地的,不能导出(如使用extern )到其他文件。 此外,它还允许您在其他文件中为其他变量使用相同的名称。 因此,如果它位于头文件中,则包含头的任何文件都将具有该符号的不同实例。

因此,如果允许您在成员的全局范围内使用它,则存在歧义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM