彻底梳理C++ static、const和static const 以及它们的初始化

Cpp面试高频题 (1) 指针和引用的区别 引用: 1.引用初始化完成,将一直绑定一个对象,无法令引用绑定另外一个对象,这就是说引用必须初始化。 2.注意引用初始化的时候,绑定的是一个对象,而引用本身不是一个对象,所以不能定义引用的引用 3.引用的对象类型之间必须匹配 指针: 1.指针本身是一个对象,对对象的操作,对指针同样可以,例如拷贝赋值等 2.指针没有规定必须初始化,指针没有初始化,编译器会默认分配一个不确定... 阅读详情

转自:http://blog.youkuaiyun.com/yjkwf/article/details/6067267

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。

      static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。

      在C++中,static静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化,如:double Account::Rate=2.25;static关键字只能用于类定义体内部的声明中,定义时不能标示为static

      在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。

      const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。

      const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt。

  1. class Test 
  2. { 
  3. public: 
  4.       Test():a(0){} 
  5.       enum {size1=100,size2=200}; 
  6. private: 
  7.       const int a;//只能在构造函数初始化列表中初始化 
  8.        static int b;//在类的实现文件中定义并初始化 
  9.       const static int c;//与 static const int c;相同。 
  10. }; 
  11.  
  12. int Test::b=0;//static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象。 
  13. cosnt int Test::c=0;//注意:给静态成员变量赋值时,不需要加static修饰符。但要加cosnt 

      cosnt成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但可以访问成员变量。当方法成员函数时,该函数只能是const成员函数。

      static成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致:1、不能直接存取类的非静态成员变量,调用非静态成员函数2、不能被声明为virtual

关于static、const、static cosnt、const static成员的初始化问题:

1、类里的const成员初始化:

在一个类里建立一个const时,不能给他初值

  1. class foo 
  2. { 
  3. public: 
  4.       foo():i(100){} 
  5. private: 
  6.       const int i=100;//error!!! 
  7. }; 
  8. //或者通过这样的方式来进行初始化 
  9. foo::foo():i(100) 
  10. {} 

2、类里的static成员初始化:

      类中的static变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:

数据类型 类名::静态数据成员名=值;

[c-sharp] view plain copy print ?
  1. class foo 
  2. { 
  3. public: 
  4.       foo(); 
  5. private: 
  6.       static int i; 
  7. }; 
  8.  
  9. int foo::i=20; 
  10. 这表明: 
  11. 1、初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆 
  12. 2、初始化时不加该成员的访问权限控制符private、public等 
  13. 3、初始化时使用作用域运算符来表明它所属的类,因此,静态数据成员是类的成员而不是对象的成员。 

3、类里的static cosnt 和 const static成员初始化

      这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法:

  1. class Test 
  2. { 
  3. public: 
  4.       static const int mask1; 
  5.       const static int mask2; 
  6. }; 
  7. const Test::mask1=0xffff; 
  8. const Test::mask2=0xffff; 
  9. //它们的初始化没有区别,虽然一个是静态常量一个是常量静态。静态都将存储在全局变量区域,其实最后结果都一样。可能在不同编译器内,不同处理,但最后结果都一样。 

这是一个完整的例子:

  1. #ifdef A_H_ 
  2. #define A_H_ 
  3. #include <iostream> 
  4. using namespace std; 
  5. class A 
  6. { 
  7. public: 
  8.       A(int a); 
  9.       static void print();//静态成员函数 
  10. private: 
  11.       static int aa;//静态数据成员的声明 
  12.        static const int count;//常量静态数据成员(可以在构造函数中初始化) 
  13.        const int bb;//常量数据成员 
  14. }; 
  15. int A::aa=0;//静态成员的定义+初始化 
  16. const int A::count=25;//静态常量成员定义+初始化 
  17. A::A(int a):bb(a)//常量成员的初始化 
  18. { 
  19.       aa+=1; 
  20. } 
  21. void A::print() 
  22. { 
  23.       cout<<"count="<<count<<endl; 
  24.       cout<<"aa="<<aa<<endl; 
  25. } 
  26. #endif 
  27. void main() 
  28. { 
  29.       A a(10); 
  30.       A::print();//通过类访问静态成员函数 
  31.       a.print();//通过对象访问静态成员函数 
  32. } 

 

C++ static关键字深度解析:从作用域到内存模型与工程实践 在C++编程中,存储期与链接性是理解变量生命周期和可见性的核心概念。静态存储期意味着变量在程序启动时分配、结束时销毁,通常位于数据段,这与自动存储期的栈变量形成对比。链接性则决定了符号在不同编译单元间的可见性,分为内部链接、外部链接和无链接。掌握这些原理对于编写模块化、可维护的代码至关重要,能有效避免命名冲突和未定义行为。其技术价值在于实现数据共享、状态保持和封装细节,广泛应用于单例模式、工厂方法、对象计数等场景。本文聚焦于C++中的static关键字,通过剖析其在局部变量、全局作用域及类成员中的用法,深入 阅读详情

相关推荐

iOS自动化之打包-xcodebuild命令行打包.app并安装到ios模拟器

xcode xcodebuild xcrun ios模拟器 iOS UI自动化测试 ios自动打包安装到ios模拟器

z12347891的博客 5073

C++——const和static区别

1.const修饰成员变量——>常成员变量(一定要在构造函数的初始化列表里面进行初始化) static修饰成员变量(不属于对象)成员变量时共享的,一定要在类外初始化 2.const修饰对象——>常对象(特点:1.成员变量2.不能调用普通的成员方法,只能调用常方法。) 普通的对象可以调用常方法 static修饰成员方法: 1.thiscall——>cdecl约定 2.没有this指针,不能访问普通的成员变量 3.能访问静态的成员变量,全局变量 4.不依赖对象 普通的成员方法

m0_43400852的博客 798

用Python实现一个猜密码的程序

我们用Python实现猜密码

sk6584631_sz的博客 1260

const与static的区别

const就是只读的意思,只在声明中使用;const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。 const的作用: (1)可以定义const常量,具有不可变性。 (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。 (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性...

weixin_34192993的博客 98

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

自定义载板RK3588HDMI输入配置完整解决方案

✅ HDMI输入信号检测✅ 自动时序识别(支持1080p@60Hz等标准格式)✅ V4L2视频设备接口✅ 实时视频流捕获✅ H.264编码录制✅ HDCP内容保护支持问题根因识别:发现了hdmim1模块资源冲突的本质问题硬件设计理解:明确了Orange Pi 5 Plus的真实硬件设计意图功能实现:成功启用HDMI输入功能,替代了无法使用的HDMI1输出完整验证:建立了从硬件检测到视频录制的完整测试流程。

梁俊星的博客 1271

静态变量static和常量const的区别

静态变量static和常量const的区别

weixin_42565127的博客 1485

Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练,你确定要错过吗?

Unity动画系统,Animation,Animator。 本文对Unity中的动画系统基础做了一个全面解析,还包括实战演练。近万字教程让你对Unity的动画系统有一个系统的了解,敬请品尝!

努力前行,总会成为自己心中的那道光 9万+

C++ static、const和static const 以及它们的初始化 (转载)

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static...

weixin_30519071的博客 558

SAP Build Work Zone standard edition 订阅报错 OIDC trust missing 的成因与完整解决路径

摘要:用户订阅SAP Build Work Zone时遇到422错误,提示未配置OpenID Connect信任。该错误表明业务用户需通过SAP Cloud Identity Services的OIDC协议认证,而当前子账户仅配置了SAML信任或未配置信任。解决方法是进入子账户的Trust Configuration页面,使用Establish Trust功能建立与SAP Cloud Identity Services的OIDC信任关系。这是SAP新版服务的强制要求,SAML协议已不被支持。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 197

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 340

C/C++基础知识点面试题

目录 一、虚函数的数据结构,如何工作? 二、const与define的区别? 三、指针与引用的区别? 四、指针与数据的区别? 五、不用临时变量实现两个变量的交换 七、一个C++源文件从文本到可执行文件经历的过程 八、C++11新特性 九、C++和C的不同 十、malloc的原理 十一、内存泄漏、野指针 十二、static 十三、union和struct 十四、new与ma...

找个特立不独行的名的博客 2万+

本文将详细介绍如何在 Qt (C++) 应用程序中集成 osgEarth,加载三维数字地球,并在指定经纬度添加三维模型(如飞机、建筑等)。

OSG 与 Qt 的交互通常需要处理 OpenGL 上下文。osgEarth 3.x 提供了对 Qt 的较好支持,或者可以使用。在普通 OSG 程序中,你需要手动处理坐标系转换将经纬度转为笛卡尔坐标 (XYZ)。这是实现的关键,将 OSG 的渲染循环集成到 Qt 的事件循环中。第三方库,但在本教程中,我们将展示一种通过继承。,将 Qt 的输入事件转换为 OSG 理解的。事件,这是实现交互(旋转地球、缩放)的基础。来嵌入 OSG 视图的标准方法。在这里我们初始化地球并添加模型。节点简化了这一过程。

qq_45859163的博客 1044

游戏开发之C++类中的static、const梳理总结(C++基础)

游戏开发之C++类中的static、const梳理总结(C++基础) TIPS:一个空类的内存大小为1个字节。 static、const部分知识来源【点击跳转】 class B { }; //sizeof(B) = 1 1.类中的静态成员(static) 类中的静态成员包括静态成员函数和静态成员变量。 1.1 静态成员函数 ①不需要类对象便可直接调用,注意静态成员函数不能直接访问成员变量、成员函数及const成员变量及const成员函数。只能访问静态成员变量、类的构造函数和析构函数。 ②类的

田螺姑娘的博客 848

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C++基础】Day 2:关键字之 const 与 static

本文系统梳理了C++中const和static关键字的核心考点。const关键字用于实现只读语义,包括常量变量、指针常量/常量指针、const成员函数和const引用等多种用法,重点区分顶层const和底层const。static关键字主要控制变量和函数的生命周期、作用域及访问权限,包含静态变量(全局/局部)、静态成员变量/函数、文件内静态函数等多种应用场景。文章通过图表对比、代码示例和面试总结,深入解析了这两个关键字的语法特性、使用场景和底层机制,为C++学习者提供了全面的知识梳理和备考指南。

冰冻三尺非一日之寒 838

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

关于const、指针和引用【C++复习】

指针+const+引用 的用法 1、const和指针的关系 const是修饰变量的,通常修饰的是它的右部,比如const int p=&a;const修饰p,说明p的 指向可以发生改变,而不能通过*p去改变指向的变量的值,const必须初始化。 const引用可以引用变量也可以引用常量,也可以引用字面常量,而普通引用则不能引用字面常量。 而指针,就是存放地址的变量,可以理解为就是地址,如int *p=a;则在p的内存空间中就存放的是a的内存空间的地址。 1.指向常量的指针(指针指向的对象是con

zypf_lover的博客 303

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++类与对象进阶】第五天核心总结:static对象+初始化列表+const成员函数

第五天的学习聚焦C++类与对象的底层语法细节与高级特性,是衔接“基础类设计”与“继承多态”的关键桥梁。static对象(控制生命周期与作用域)、初始化列表(类构造的标准规范)、const成员函数(只读接口的安全保障)。本文将这三大知识点按「核心概念+语法规则+实战案例+避坑指南」的结构梳理,同时融入经典刷题场景(求1+2+...+n),让理论与实战深度结合,帮你彻底吃透第五天的重点内容。static对象让我们掌握了“生命周期与作用域”的控制技巧,实现了无循环的累加实战;初始化列表。

zzy200762的博客 1022

C/C++中static关键字用法总结

在使用关键字static的时候,我们需要注意一下几个原则:被static修饰的变量的存储位置都在静态区,且生命周期延长至整个程序运行结束。static具有隔离作用,被static修饰的全局变量和全局函数的作用域由全局变为当前文件。静态变量虽然具有全局变量的生命周期,但只能作用于自己的作用域。普通静态成员需要在类的外面进行初始化。静态成员函数不能调用类的非静态成员,包括非静态成员和非静态成员函数。

红军不怕远征难,万水千山只等闲 1495

C++函数内static变量深度解析:存储期、初始化与线程安全

在C++编程中,变量的存储期与初始化机制是理解内存管理和对象生命周期的核心基础。静态存储期意味着对象在程序整个运行期间持续存在,这与自动存储期的局部变量形成鲜明对比。从技术原理上看,C++通过精细的初始化规则(如常量初始化、零初始化)和链接性控制,实现了对变量可见性与生命周期的管理。这一机制在工程实践中价值显著,它支持延迟初始化、状态保持和资源共享等模式,能有效提升性能与资源利用率。在多线程环境下,C++11标准进一步规定了函数内static变量的线程安全初始化,为单例模式等常见应用场景提供了简洁可靠的实现

weixin_30664615的博客 403

【C++】类和对象——Lesson2

运算符重载

小羊的博客 2449

C/C++知识点梳理之static关键字与const关键字

1.static关键字修饰变量: 局部变量:局部变量指在代码块{}中定义的变量,只在代码块内有效,缺省时为存储方式为自动变量或者动态变量,即程序执行到变量定义处才为变量分配存储空间,当改代码段执行结束是释放该存储空间。 static修饰局部变量时,则改变变量存储方式(生命周期),是变量成为静态局部变量,即在编译过程中为其分配存储空间,直到程序退出才释放这块空间,其生命周期为整个程序。这样使得该变...

陶超的博客 356

【C++程序设计第4课--static、const关键字】

本文为C++编程学习者梳理两项重要关键字static、const的语法场景,同时引入“友元函数”的概念,通过示例代码的形式展现,希望能帮大家降低入门门槛。内容为个人学习经验总结,如有疏漏,感谢指正。

感谢大家对本博客的支持,提前祝大家新年快乐!明年我会为大家带来更优质的文章! 272

初始化列表、static成员与友元声明(类和对象ep3)

之前我们实现对象的初始化,都是在构造函数体内部实现,但是其实还有一种初始化变量的方法:初始化列表。C++中的初始化列表是类和对象的构造中最重要的一环,因为类的对象中所有的非static成员变量都要在初始化列表中定义与初始化。

2301_80129606的博客 845

C++知识点梳理五const成员

const成员 const数据成员 const类型变量是不可以修改,只读模式 必须采用初始化参数列表方式进行初始化 const成员函数 写法上, const写在函数后面

weixin_46493640的博客 524

【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】

本文主要总结 C++ 面试中常见的基础知识点,包括指针、引用、const、static 以及 new/delete。通过代码示例说明它们的基本用法、常见区别、使用场景和面试回答方式,帮助初学者快速理解 C++ 基础高频考点。

qq_64148519的博客 334
上一篇: Js作用域链及变量作用域【详解】
下一篇: C#托管代码与C++非托管代码互相调用
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值