首页 > 编程语言 >C++变量的声明与定义

C++变量的声明与定义

时间:2022-12-06 19:31:29浏览次数:61  
标签:变量 int C++ 编译器 分配内存 extern 定义


  声明,是用以告诉编译器类型及其细节,本身并不涉及内存分配;
  定义,即内存分配,编译器将在相对内存地址上为其对象定址。
  定义的同时也作了声明,当定义的时候我们肯定已经告知编译器其类型及细节,然后才能分配内存。总体来说,它们的根本区别就是有无内存的分配,下面具体分析:

int x;         //定义x,已为x分配内存,但值未知
int x=1; //定义x,已为x分配内存,值初始化为1

extern int x; //使用关键字extern声明x,告知编译器x类型及其它细节,但未分配内存。
//其定义可以在本.cpp中定义,也可以在其它.cpp中定义,
//原因是由于extern关键字,更多细节参见extern解析

  另外,​​extern int x=1​​​也被当做定义,虽然用了​​extern​​​来修饰,注意此句若放在函数内部,包括​​main()​​​,会报错:不允许对外部变量的局部声明使用初始值设定项。因为这是毫无意义的,读者可以参考​​stackoverflow的一篇帖子​​​。
  如果是类成员变量呢?

class Tree
{
private:
double height; //普通成员变量,这是声明
static int num; //静态成员变量,这是声明
public:
Tree();
};

int Tree::num; //这是定义

  定义时分配内存,​​static​​​定义的变量放在全局/静态存储区。只要程序正确运行,不管我们有没有使用类​​Tree​​​定义对象,静态成员变量​​num​​​都已经在内存中存在,而普通变量​​height​​​只有在定义类对象时才会出现。读者可以调试并监视即可得到证实。


标签:变量,int,C++,编译器,分配内存,extern,定义
From: https://blog.51cto.com/u_11937443/5916571

相关文章

  • 强化学习如何自定义环境?【写代码的时候如何与标准接轨】
    还是需要学习如何自定义一个可以交互的环境,走上标准的道路,才能调用很多东西。摸清楚套路,然后一步一步跟着实现。Justgetclosetoyouraim!这次的环境搭建主要模......
  • 记录--uniapp自定义相机 自定义界面拍照录像闪光灯切换摄像头
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助因公司业务需要,需要开发水印相机功能,而项目代码用的uniapp框架,App端只能简单调用系统的相机,无法自定义界......
  • C++的region代码块折叠
    之前用C#,有比较方便的#region功能:#region代码块名//...代码块#endregion 原来C++也有类似功能,示例如下:#pragmaregion代码块名//...#pragmaendregion......
  • [c++11新特性]08-defer的实现
    defer的实现​​参考​​​defer的实现​​​defer的实现​​在go语言中有一个关键字defer可以用来指示当程序跳出某一作用域的时候执行指定的操作。假定C++中也定义了d......
  • [c++11新特性]09-chrono的使用与封装
    时间类的简介​时间类的简介​​​duration简介​​​​借助chrono实现的定时器​​​​time_point​​​时间类的封装​​​时间格式化​​​​日期变化​​duration简......
  • jsdelivr被墙,hexo-next切换为自定义CDN
    1.Next主题需要升级到8.9以上,我的是多少忘记了,最好升级到最新使用npm管理gitclonehttps://github.com/next-theme/hexo-theme-nextthemes/next2.替换链接官方......
  • vue3 input 控制小数位 自定义指令
    创建文件 globalindex.ts main.ts文件引入importglobalfrom"@/global";app.use(global)index.ts    内容import{App}from"vue";exportdefaul......
  • [c++11新特性]02-模板优化
    模板优化​模板优化​​​模板别名​​​​默认模板参数​​​​外部模板​​模板别名在了解类型别名模板之前,需要理解『模板』和『类型』之间的不同。仔细体会这句话:模板是......
  • [c++11新特性]07-可变参模板
    可变参模板​​可变参数模板​​​可变参模板​​​简介​​​​递归模板函数​​简介可变参模板是c++11引入的特别重要的一个特性,和c语言中的可变参一样,也是使用...来......
  • JDK环境变量配置
    配环境变量单击"计算机-属性-高级系统设置",单击"环境变量"。新建->变量名"JAVA_HOME",变量值"C:\develop\Java\jdk1.8.0_191"(即JDK的安装路径)编辑->变量名"Path",......