C++中声明和定义的区别
声明
这有一个与这个名字相关的东西,并且它是这个类型的,告诉编译器我要使用它,并期待它定义在某一个地方。
定义
定义是指提供所有必要的信息(占用内存大小),使其能够创建整个实体。
我们必须明白的:
一旦定义了也就是声明了,所以可以同时声明和定义一个函数、 类或者变量,但是不一定非得这样做。 定义一个函数意味着提供函数体;
void func() {};
定义一个类意味着给出类的方法以及成员;
class A {};
定义一个变量意味着告诉编译器变量的类型以及在程序的哪儿去创建这个变量;
int a;
默认声明一个变量,必须提供定义! 如何仅仅只去声明一个变量?请用extern!
extern int a; 仅仅只是声明变量而不去创建它
当extern修饰变量初始化式时,失去extern仅仅声明的效果,表示定义。
extern int a = ;
当extern修饰函数定义以及类定义时,同时也失去了extern仅仅声明的效果。 说道extern,我们来说一下C++中的storage classes
storage classes定义了C++程序中的变量、函数的作用域以及生命周期。
auto
所有局部变量的默认的storage classes
register
用于局部变量,声明该变量存储于寄存器中,对该变量不能用&取地址运算
extern
用于全局变量或者函数,声明该变量或者函数是全局可见的,告诉编译器该变量或者函数可以在程序的某个地方找到
static 用于全局变量或者函数,声明该变量或者函数是本编译单元可见(.o文件),不同的.o文件包含了名字相同的staic变量或者函数,会有不同的副本,编译不会出错;C++中,static还用于类中的数据成员和成员函数 局部变量默认是auto
非const全局变量默认是extern,const全局变量默认是static
所有变量默认声明就是定义
函数默认是extern 分析举例
int a; //声明即是定义
a是int类型的(声明);int类型占用4个字节(定义);
extern int a; //声明
a仅仅只是int类型的(声明) class A {int a;}; //声明即是定义
A是一个class类型的(声明);class A中有一个int成员a,占用4字节(定义);
class A; //声明
A是一个class类型的(声明);class类型不知道占用多少个字节,class是本地属性,只作用于本编译单元(.o文件),同一个编译单元(.o文件)不能有相同名字的class;不同的编译单元(.o文件)可存在不同的class,不会出现链接错误 A obj_a; //声明即是定义
obj_a是一个class A类型(声明);class A类型占用4个字节
extern A obj_a; //声明
obj_a仅仅只是class A类型;
C++中声明和定义的区别的更多相关文章
- [转载]C++中声明与定义的区别
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...
- 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...
- C\C++中声明与定义的区别
声明和定义是完全同的概念,声明是告诉编译器"这个函数或者变量可以在哪找到,它的模样像什么".而定义则是告诉编译器,"在这里建立变量或函数",并且为它们分配内存空 ...
- C++中声明与定义的区别
如果是指变量的声明和定义: 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而 定义就是分配了内存.对于下面的两句代码:void Func(){in ...
- PHP中变量声明和定义的区别
先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...
- C++ 变量的声明与定义的区别
变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...
- C++之声明与定义的区别
直接举例,在C++中,声明与定义的区别如下: extern int a;//若有extern关键字,则只是声明 int b;//若没有extern关键字,则为声明+定义 int a;//若之前已经声明 ...
- 【C++】C++中变量的声明与定义的区别
声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变 ...
- 浅谈声明与定义的区别 分类: C/C++ 2015-06-01 15:08 157人阅读 评论(4) 收藏
以下代码使用平台是VS2012. 清楚明白声明与定义是一名合格的程序猿的基本要求. 本人认为,C++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类 ...
随机推荐
- Objective-C 继承和多态
学习Java我们知道类有三大特征,封装,继承,多态.而在Objective-C中也有继承的概念,今天就来看看Objective-C中的继承和多态. 首先,我们来看看示例代码: //Animal.h # ...
- Ajax:js自执行函数、jsonp、cros
一.js自执行函数 #(function(){alert(1);})(); (function(){ alert(1); } )(); 二.javascript同源策略 1. 什么是同源策略 理解跨域 ...
- LeetCode:路径总和【112】
LeetCode:路径总和[112] 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例 ...
- 【leetcode刷题笔记】Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- awk的输出格式控制:print 和printf
1.两个函数和若干个内部变量控制awk的输出格式: 两个函数:print和printf 内部变量:OFS:输出的列间隔符,默认为tab; ORS:输出的行间隔符,默认为\n printf更加自由化, ...
- Ubuntu 使用国内apt源
编辑/etc/apt/source-list deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe mult ...
- php flock 使用实例
php flock 使用实例 bool flock ( resource $handle , int $operation [, int &$wouldblock ] ) flock()允许执 ...
- Java C++ 比较 – 虚函数、抽象函数、抽象类、接口
[转自]原文 Java – 虚函数.抽象函数.抽象类.接口 1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它 ...
- ajax01简介
(Asynchronous JavaScript and XML)Ajax :异步 JavaScript 和 XML,一种允许浏览器和服务器通信进行少量数据交换而无需重新加载整个网页,以实现更新部分网 ...
- Web 应用程序项目与 Visual Studio 中的网站项目的异同
要查看英语原文,请勾选“英语”复选框.也可将鼠标指针移到文本上,在弹出窗口中显示英语原文. 翻译 英语 本文档已存档,并且将不进行维护. Web 应用程序项目与 Visual Studio 中的网站项 ...