C++中如何定义变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何定义变量相关的知识,希望对你有一定的参考价值。
简单说:你要定义一个整形变量就是直接“类型 变量名;”就行。例如定一个叫做a的整形变量“int a;”
详细说明:
在C++中,变量声明(declaration)只有在使用extern关键字时才成立,其他情况下都是定义(definition),而在使用extern的同时给变量赋初始值,则声明变为定义,extern关键字也将被编译器忽略。C++变量的作用域缺省情况下是全局的,也就是对多个源文件可见,比如说,如果在a.cpp和b.cpp中都有
int a;
则编译器链接两个文件时会报告错误,“变量重复定义”。因此,要使变量定义只对该源文件可见,就要显式加上static关键字。因此,我们可以想到,如果在a.cpp中有
extern int a;
而在b.cpp中有
static int a = 9;
那么,编译器链接时会给出错误信息,“找不到a的定义”,因为a的定义在b.cpp并只对该文件可见,a.cpp找不到a的定义因此出错。
变量的声明和定义是比较容易混淆的概念,因此记住一点,除非有extern关键字,否则都是变量的定义。由此,我们可以归纳出几点好的程序设计风格:
1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。
2. 尽量使用static关键字把变量定义限制于该源文件作用域内,除非该变量被设计成全局的。
例外情况是const变量和typedef类型,在《The C++ Programming Language》9.2节中说到,const和typedef缺省作用域是局部的,因此不需要static来显式声明。因此,在.h文件中放置const变量定义不会产生问题,编译器会给每个引用该.h文件的源文件产生一份该const变量的局部定义,就像该变量是定义于该源文件中一样。大家也不用太担心编译器这么做会浪费空间,因为编译器优化过程一般会把有相同值的const变量进行合并。
对于static关键字,要多说几句的是,static一般有两种意思,当修饰函数定义里的变量或者类成员变量时,称作静态变量;修饰其他变量时,称作局部变量。为防止混淆,一般不要特意给局部变量加上static关键字。除了static关键字,namespace也可以使变量定义成为局部的。 参考技术A 楼上一看就混分的,FOR,WHILE我虽然不会C++,但是也知道是循环语句,不是定义变量。 参考技术B 得先有一个头文件,然后输入 用FOR ,WHILE,就行了 参考技术C 我记得书上有,晚上给你去 查查,现在 在上班 参考技术D 你上网查或买书看比较实际。
c++ 中如何声明一个 int 变量
c++ 中如何声明一个 int 变量?例如 int a;这也算是一个定义,而不是一个声明,因为int a;int a;这种代码会被编译器(VS2005)提示重定义。
原子类型的变量一般都不需要 纯声明式声明(楼主说的定义是 定义式声明)差别在于 声明(通知编译器,此资源存在,后续工作由连接器处理)
定义(通知编译器,此资源不存在,但是将会使用,请分配【不仅指分配内存,还包括在维护表中生成类体等】)。
所以 C++ 中的声明int 变量差不多(其他方式恕我才疏学浅)只有一种,那就是非本文件的成员,或是说,声明部分前面已经有对该变量的引用。可以使用 extern 关键字声明一下。(作用只是告诉编译器,关于此变量不要报错) 参考技术A C++ primer plus 书上写“声明就是定义” 参考技术B 二楼少提到一点: 你在其中一个头文件中定义了 extern int c;之后, 再某一个cpp文件中添加正常的定义:int c;(这里不要赋初值)。就可以避免在该头文件被多个文件include的时候出现的重定义的问题
以上是关于C++中如何定义变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Tensorflow C++ 中定义一个自定义的有状态操作来保存变量的值?