首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于C++的课吗?

关于C++的课吗?
EN

Stack Overflow用户
提问于 2016-06-20 09:04:14
回答 1查看 98关注 0票数 1
代码语言:javascript
复制
#include <iostream>

using namespace std;

class MyStaticClass{
public:
    static int value;
    MyStaticClass(){ 
        value++; 
    }
    ~MyStaticClass(){}
};
int MyStaticClass::value;
void main(){
    MyStaticClass::value = 0;
    for (int i = 0; i<9; i++)
        MyStaticClass *c = new MyStaticClass();
    cout << MyStaticClass::value;
    system("pause");
}

请解释为什么结果是9,当用MyStaticClass *c = new MyStaticClass()替换MyStaticClass c()时,结果更改为0?最后,int MyStaticClass::value;的含义是什么,为什么当我删除这一行时编译器会显示错误?谢谢大家!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-20 09:06:46

int MyStaticClass::value;告诉编译器为static变量value保留存储。如果你不这么做,链接器就会失效。

结果是9,因为for循环体执行了9次:您正在创建9个MyStaticClass的新实例(它实际上不是一个static类,它只有一个static成员)。请注意,您应该对所有这些对象进行delete,否则程序会泄漏内存。

MyStaticClass c();为不接受参数并返回MyStaticClass的函数c声明了一个函数原型:它执行而不是创建对象。这被称为最烦人的解析。由于没有创建对象,所以value保持在0。如果你写MyStaticClass c;的话那就不一样了

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37918465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档