大连市那里做网站宣传的好wordpress主题小工具修改
大连市那里做网站宣传的好,wordpress主题小工具修改,外贸网站建设有用吗,网站域名如何注册文章目录1. static的用法和作用#xff1f;2.静态变量什么时候初始化1. static的用法和作用#xff1f;
1.先来介绍它的第一条也是最重要的一条#xff1a;隐藏。#xff08;static函数#xff0c;static变量均可#xff09;
当同时编译多个文件时#xff0c;所有未加…
文章目录1. static的用法和作用2.静态变量什么时候初始化1. static的用法和作用
1.先来介绍它的第一条也是最重要的一条隐藏。static函数static变量均可
当同时编译多个文件时所有未加static前缀的全局变量和函数都具有全局可见性。用static修饰的变量的声明式即为其定义式。如果没有手动的初始化系统会为该变量提供一个初始值。 但是static变量最好在使用的编译单元里.c/.cpp声明定义如果定义在头文件里如果头文件被重复引用讲导致变量的重复定义。
2.static的第二个作用是保持变量内容的持久。static变量中的记忆功能和全局生存期
存储在静态数据区的变量会在程序刚开始运行时就完成初始化也是唯一的一次初始化。共有两种变量存储在静态存储区全局变量和static变量只不过和全局变量比起来static可以控制变量的可见范围说到底static还是用来隐藏的。
3.static的第三个作用是默认初始化为0static变量
其实全局变量也具备这一属性因为全局变量也存储在静态数据区。 在静态数据区内存中所有的字节默认值都是0x00某些时候这一特点可以减少程序员的工作量。
static的作用
4.static的第四个作用C中的类成员声明static
1) 函数体内static变量的作用范围为该函数体不同于auto变量
该变量的内存只被分配一次因此其值在下次调用时仍维持上次的值 #includeiostream
using namespace std;class solution {
public:int a;void print() {static int s 100;cout s endl;s;}
};int main() {solution D1;for (int i 0; i 5; i) {D1.print();}return 0;
}100
101
102
103
1042) static修饰的类的成员变量必须要在类外初始化
static修饰的类成员函数既可以在类内定义又可以在类外定义。#includeiostream
using namespace std;class solution {
private:static int s;
public:static void print() {cout static print endl;}//类的静态成员函数可以在类内进行定义
};int solution::s 1200;//在类的静态成员变量必须在类外进行初始化。int main() {solution D1;D1.print();return 0;
}3) 在模块内的static全局变量可以被模块内所用函数访问但不能被模块外其它函数访问 #includeiostream
using namespace std;class solution {
private:static int s;
public:static void print() {cout static print s endl;}void pprint() {cout pprint s endl;}void ppprint();
};int solution::s 1200;void solution::ppprint() {cout ppprint s endl;
}
int main() {solution D1;D1.print();D1.pprint();D1.ppprint();return 0;
}static print1200
pprint1200
ppprint12004) 在模块内的static函数只可被这一模块内的其它函数调用
这个函数的使用范围被限制在声明它的模块内 5) 在类中的static成员变量属于整个类所拥有对类的所有对象只有一份拷贝 6) 在类中的static成员函数属于整个类所拥有这个函数不接收this指针
因而只能访问类的static成员变量。7) 由于static修饰的类成员属于类不属于对象因此static类成员函数是没有this指针的
this指针是指向本对象的指针。正因为没有this指针所以static类成员函数不能访问非static的类成员
只能访问 static修饰的类成员8) static成员函数不能被virtual修饰static成员不属于任何对象或实例
所以加上virtual没有任何实际意义
静态成员函数没有this指针虚函数的实现是为每一个对象分配一个vptr指针
而vptr是通过this指针调用的所以不能为virtual
虚函数的调用关系this-vptr-ctable-virtual function2.静态变量什么时候初始化 初始化只有一次但是可以多次赋值在主程序之前编译器已经为其分配好了内存。 静态局部变量和全局变量一样数据都存放在全局区域所以在主程序之前编译器已经为其分配好了内存但在C和C中静态局部变量的初始化节点又有点不太一样。在C中初始化发生在代码执行之前编译阶段分配好内存之后就会进行初始化所以我们看到在C语言中无法使用变量对静态局部变量进行初始化在程序运行结束变量所处的全局内存会被全部回收。 而在C中初始化时在执行相关代码时才会进行初始化主要是由于C引入对象后要进行初始化必须执行相应构造函数和析构函数在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作并非简单地分配内存。所以C标准定为全局或静态对象是有首次用到时才会进行构造并通过atexit()来管理。在程序结束按照构造顺序反方向进行逐个析构。所以在C中是可以使用变量对静态局部变量进行初始化的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87958.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!