【问题标题】:What is the last line of this code doing? [duplicate]这段代码的最后一行是做什么的? [复制]
【发布时间】:2020-06-20 12:25:00
【问题描述】:

我从来没有见过这个:

class myclass{
    static int value;
};
int myclass::value(5);

这是我在 C++ Concurrency in Action 一书中看到的代码的简短版本,但我不知道从类块中声明的静态类值是什么。

【问题讨论】:

  • 这能回答你的问题吗? Undefined reference to static class member
  • 不完全,在那个问题中我可以看到这是一个值的声明,但为什么括号之间是 5?
  • 那么,“5”是值+声明的静态初始化?
  • static int value; 是声明。 int myclass::value(5); 是定义。定义等价于int myclass::value = 5;
  • 这一行初始化静态成员。我认为您使用 c++17 之前的旧版本,因为使用 c++ 17。您可以在类的定义中初始化静态成员,如下所示 class myclass{ inline static int value {5}; };

标签: c++


【解决方案1】:
  1. :: 被称为作用域解析运算符,其目的之一是在类外访问类的静态变量,上面的代码似乎在类外进行相同的初始化。
  2. 在 c++ 中初始化变量的一种方法,称为构造函数初始化,是通过将初始值括在括号 (()) 之间来完成的: 所以 int myclass::value(5);相当于 int myclass::value = 5;

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多