相关疑难解决方法(0)

static关键字及其在C++中的各种用途

关键字static是一个在C++中具有多种含义的关键字,我发现它非常令人困惑,我永远无法理解它实际上应该如何工作.

根据我的理解,static存储持续时间,这意味着它在全局的情况下持续程序的生命周期,但是当你谈论本地时,它意味着它默认为零初始化.

C++标准对具有关键字的类数据成员说明了这一点static:

3.7.1静态存储持续时间[basic.stc.static]

3关键字static可用于声明具有静态存储持续时间的局部变量.

4应用于类定义中的类数据成员的关键字static为数据成员提供静态存储持续时间.

局部变量是什么意思?这是一个函数局部变量吗?因为还有一个当你声明一个本地函数时static,它只被初始化一次,它第一次进入这个函数.

它也只谈到关于类成员的存储持续时间,它是非实例特定的,那也是staticno 的属性?或者是存储持续时间?

那么static和文件范围的情况如何呢?是否所有全局变量都被视为默认具有静态存储持续时间?以下(来自第3.7.1节)似乎表明:

1所有没有动态存储持续时间,没有线程存储持续时间且不是本地的变量都具有静态存储持续时间.这些实体的存储应持续该计划的持续时间(3.6.2,3.6.3)

如何static与变量的链接相关?

整个static关键字是彻头彻尾的混乱,有人可以澄清英语的不同用途,并告诉我何时初始化一个static类成员?

c++ static

186
推荐指数
6
解决办法
16万
查看次数

静态成员函数错误; 如何正确写签名?

尝试使用当前签名在g ++中编译我的代码时出错:

cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Run Code Online (Sandbox Code Playgroud)

我的问题是双重的:

  1. 为什么不这样编译?
  2. 什么是正确的签名,为什么?

在使用C++时,签名一直是我的死

编辑:这是类头文件,以及:

class Foo {


public:
    Foo();

    ~Foo();

    bool insert(const Foo2 &v);

    Foo * find(const Foo2 &v);

    const Foo * find(const Foo2 &v) const;

    void output(ostream &s) const;

private:
    //Foo(const Foo &v);
    //Foo& operator =(const Foo &v);
    //Not implemented; unneeded


    struct Node {
        Foo2 info;
        Node *left;
        Node *right;
    };

    Node * root;

    static bool insert(const Foo2 &v, Node *&p);


    static void …
Run Code Online (Sandbox Code Playgroud)

c++ static-members method-signature static-functions

161
推荐指数
1
解决办法
9万
查看次数