二、C++基础一(基本语法、程序结构、关键字、数据类型、变量类型和作用域、常量的使用)

一、C++ 基本语法

C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。

. 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
. 类 - 类可以定义为描述对象行为/状态的模板/蓝图。
. 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
. 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。

二、C++ 程序结构

让我们看一段简单的代码,可以输出单词 Hello World。

#include 
using namespace std;
 
// main() 是程序开始执行的地方
 
int main()
{
     
   cout << "Hello World"; // 输出 Hello World
   return 0;
}

. C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 。
. 下一行 using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
. 下一行 // main() 是程序开始执行的地方 是一个单行注释。单行注释以 // 开头,在行末结束。
. 下一行 int main() 是主函数,程序从这里开始执行。
. 下一行 cout << “Hello World”; 会在屏幕上显示消息 “Hello World”。
. 下一行 return 0; 终止 main( )函数,并向调用进程返回值 0。

2.1 头文件名

#include  

该编译指令导致预处理器将iostream文件的内容添加到程序中。这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本。

这提出了一个问题:为什么要将iostream文件的内容添加到程序中呢?答案涉及程序与外部世界之间的通信。iostream中的io指的是输入(进入程序的信息)和输出(从程序中发送出去的信息)。C++的输入/输出方案涉及iostream文件中的多个定义。为了使用cout来显示消息,第一个程序需要这些定义。#include编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器。实际上,iostream文件的内容将取代程序中的代码行#include < iostream>。原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件。

注意:
使用cin和cout进行输入和输出的程序必须包含文件iostream

头文件名的使用,例如,头文件math.h支持各种C语言数学函数,但C++的用法变了。现在,对老式C的头文件保留了扩展名h(C++程序仍可以使用这种文件),而C++头文件则没有扩展名。有些C头文件被转换为C++头文件,这些文件被重新命名,去掉了扩展名h(使之成为C++风格的名称),并在文件名称前面加上前缀c(表明来自C语言)。例如,C++版本的math.h为cmath

头文件类型 约定 示例 说明
C++旧式风格 以.h结尾 iostream.h C++程序可以使用
C旧式风格 以.h结尾 math.h C、C++程序可以使用
C++新式风格 没有扩展名 iostream C++程序可以使用,使用namespace std
转换后的C 加上前缀c,没有扩展名 cmath C++程序可以使用,可以使用不是C的特性,如namespace std

2.2 命名空间(名称空间)

如果使用iostream,而不是iostream.h,则应使用下面的名称空间编译指令来使iostream中的定义对程序可用:

using namespace std;

这叫做using编译指令。名称空间支持是一项C++特性,旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序。一个潜在的问题是,可能使用两个已封装好的产品,而它们都包含一个名为wanda( )的函数。这样,使用wanda( )函数时,编译器将不知道指的是哪个版本。名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以用名称空间的名称来指出想使用哪个厂商的产品。因此,Microflop Industries可以将其定义放到一个名为Microflop的名称空间中。这样,其wanda( )函数的全称为Microflop::wanda( );同样,Piscine公司的wanda( )版本可以表示为Piscine::wanda( )。这样,程序就可以使用名称空间来区分不同的版本了:

Microflop::wanda("go dancing?");//使用Microflop 版本
Piscine::wanda("a fish named Desire");//使用Piscine 版本

按照这种方式,类、函数和变量便是C++编译器的标准组件,它们现在都被放置在名称空间std中。仅当头文件没有扩展名h时,情况才是如此。这意味着在iostream中定义的用于输出的cout变量实际上是std::cout,而endl实际上是std::endl。因此,可以省略编译指令using,以下述方式进行编码:

std::count<<"go dancing?";
std::count<< std::endl;

2.3 count 进行C++输出

双引号括起的部分是要打印的消息。在C++中,用双引号括起的一系列字符叫做字符串,因为它是由若干字符组合而成的。<<符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径。
二、C++基础一(基本语法、程序结构、关键字、数据类型、变量类型和作用域、常量的使用)_第1张图片

2.4 控制符endl

endl是一个特殊的C++符号,表示一个重要的概念:重起一行。在输出流中插入endl将导致屏幕光标移到下一行开头。诸如endl等对于cout来说有特殊含义的特殊符号被称为控制符(manipulator)。和cout一样,endl也是在头文件iostream中定义的,且位于名称空间std中。

#include 
using namespace std;

int main()
{
     
   cout << "Hello " ; // 输出 Hello World
   cout << "World" <<endl;
   cout << "123" <<endl;
   return 0;
}

输出结果

Hello World
123

2.4 cin 进行C++输入

当对正在运行的程序输入一个值时,需要用到cin,这是与cout对应的用于输入的对象。如

#include 
using namespace std;
 
// main() 是程序开始执行的地方
 
int main()
{
     
   int carrots;
   cout << "how many carrots do you have?" <<endl;
   cin >> carrots;
   cout << "Here are two more." ;
   carrots += 2;
   cout << "Now you have " << carrots << " carrots." <<endl;  //进行拼接
   return 0;
}

输出:

Hello  how many carrots do you have?
6    //这是输入值
Here are two more.Now you have 8 carrots.

上面的输出表明,从键盘输入的值最终被赋给变量carrots。下面就是执行这项功能的语句:

 cin >> carrots;

从这条语句可知,信息从cin流向carrots。显然,对这一过程有更为正式的描述。就像C++将输出看作是流出程序的字符流一样,它也将输入看作是流入程序的字符流。iostream文件将cin定义为一个表示这种流的对象。输出时,<<运算符将字符串插入到输出流中;输入时,cin使用>>运算符从输入流中抽取字符。通常,需要在运算符右侧提供一个变量,以接收抽取的信息(符号<<和>>被选择用来指示信息流的方向)。

2.5 标准错误流(cerr)

预定义的对象 cerr 是 iostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出

cerr 也是与流插入运算符 << 结合使用的,如下所示:

#include 
 
using namespace std;
 
int main( )
{
     
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

运行结果
Error message : Unable to read…

2.6 标准日志流(clog)

预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准错误设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出

clog 也是与流插入运算符 << 结合使用的,如下所示:

#include 
 
using namespace std;
 
int main( )
{
     
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

运行结果
Error message : Unable to read…

通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

三、C++ 关键字

下表列出了 C++ 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default inline static void
delete int static_cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template

完整关键字介绍可查阅:链接: C++ 的关键字(保留字)完整介绍.

四、C++ 数据类型

使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。

您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。

4.1基本的内置类型

C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:

类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

其实 wchar_t 是这样来的:

typedef short int wchar_t;

所以 wchar_t 实际上的空间是和 short int 一样。

一些基本类型可以使用一个或多个类型修饰符进行修饰:
. signed
. unsigned
. short
. long
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。

注意:不同系统会有所差异,一字节为 8 位。
注意:long int 8 个字节,int 都是 4 个字节,早期的 C 编译器定义了 long int 占用 4 个字节,int 占用 2 个字节,新版的 C/C++ 标准兼容了早期的这一设定。

类型 范围
char 1 个字节 -128 到 127 或者 0 到 255
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
float 4 个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double 16 个字节 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t 2 或 4 个字节 1 个宽字符

从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。

下面实例会输出您电脑上各种数据类型的大小。

#include  
#include 
 
using namespace std;  
  
int main()  
{
       
    cout << "type: \t\t" << "************size**************"<< endl;  
    cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);  
    cout << "\t最大值:" << (numeric_limits<bool>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;  
    cout << "char: \t\t" << "所占字节数:" << sizeof(char);  
    cout << "\t最大值:" << (numeric_limits<char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;  
    cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);  
    cout << "\t最大值:" << (numeric_limits<signed char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;  
    cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);  
    cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;  
    cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);  
    cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;  
    cout << "short: \t\t" << "所占字节数:" << sizeof(short);  
    cout << "\t最大值:" << (numeric_limits<short>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;  
    cout << "int: \t\t" << "所占字节数:" << sizeof(int);  
    cout << "\t最大值:" << (numeric_limits<int>::max)();  
    cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;  
    cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);  
    cout << "\t最大值:" << (numeric_limits<unsigned>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;  
    cout << "long: \t\t" << "所占字节数:" << sizeof(long);  
    cout << "\t最大值:" << (numeric_limits<long>::max)();  
    cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;  
    cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);  
    cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;  
    cout << "double: \t" << "所占字节数:" << sizeof(double);  
    cout << "\t最大值:" << (numeric_limits<double>::max)();  
    cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;  
    cout << "long double: \t" << "所占字节数:" << sizeof(long double);  
    cout << "\t最大值:" << (numeric_limits<long double>::max)();  
    cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;  
    cout << "float: \t\t" << "所占字节数:" << sizeof(float);  
    cout << "\t最大值:" << (numeric_limits<float>::max)();  
    cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;  
    cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);  
    cout << "\t最大值:" << (numeric_limits<size_t>::max)();  
    cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;  
    cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;  
    // << "\t最大值:" << (numeric_limits::max)() << "\t最小值:" << (numeric_limits::min)() << endl;  
    cout << "type: \t\t" << "************size**************"<< endl;  
    return 0;  
}

本实例使用了 endl,这将在每一行后插入一个换行符,<< 运算符用于向屏幕传多个值,sizeof() 函数用来获取各种数据类型的大小。

当上面的代码被编译和执行时,它会产生以下的结果,结果会根据所使用的计算机而有所不同:

type:         	************size**************
bool:         	所占字节数:1    最大值:1       		 		最小值:0
char:         	所占字节数:1    最大值:        				最小值:?
signed char:  	所占字节数:1    最大值:       		 			最小值:?
unsigned char:  所占字节数:1    最大值:?        				最小值:
wchar_t:     	所占字节数:4    最大值:2147483647        		最小值:-2147483648
short:         	所占字节数:2    最大值:32767        			最小值:-32768
int:         	所占字节数:4    最大值:2147483647    			最小值:-2147483648
unsigned:     	所占字节数:4    最大值:4294967295    			最小值:0
long:         	所占字节数:8    最大值:9223372036854775807    	最小值:-9223372036854775808
unsigned long: 	所占字节数:8    最大值:18446744073709551615    最小值:0
double:     	所占字节数:8    最大值:1.79769e+308    		最小值:2.22507e-308
long double:   	所占字节数:16    最大值:1.18973e+4932    		最小值:3.3621e-4932
float:         	所占字节数:4    最大值:3.40282e+38    			最小值:1.17549e-38
size_t:     	所占字节数:8    最大值:18446744073709551615    最小值:0
string:     	所占字节数:24
type:        	 ************size**************

位与字节
计算机内存的基本单元是位(bit)。可以将位看作电子开关,可以开,也可以关。关表示值0,开表示值1。8位的内存块可以设置出256种不同的组合,因为每一位都可以有两种设置,所以8位的总组合有2×2×2×2×2×2×2×2,即256。因此,8位单元可以表示0-255或者-128到127。每增加一位,组合数便加倍。这意味着可以把16位单元设置成65 536个不同的值,把32位单元设置成4 294 672 296个不同的值,把64位单元设置为18 446 744 073 709 551 616个不同的值。作为比较,unsigned long存储不了地球上当前的人数和银河系的星星数,而long long能够。
字节(byte)通常指的是8位的内存单元。从这个意义上说,字节指的就是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。然而,C++对字节的定义与此不同。C++字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说,可能取值的数目必须等于或超过字符数目。在美国,基本字符集通常是ASCII和EBCDIC字符集,它们都可以用8位来容纳,所以在使用这两种字符集的系统中,C++字节通常包含8位。然而,国际编程可能需要使用更大的字符集,如Unicode,因此有些实现可能使用16位甚至32位的字节。有些人使用术语八位组(octet)表示8位字节。

4.2 typedef 声明

您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:

typedef type newname; 

例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:

typedef int feet;

现在,下面的声明是完全合法的,它创建了一个整型变量 distance:

feet distance;

4.3 枚举类型

枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。

如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

创建枚举,需要使用关键字 enum。枚举类型的一般形式为:

enum 枚举名{
      
     标识符[=整型常数], 
     标识符[=整型常数], 
... 
    标识符[=整型常数]
} 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。

例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 “blue”。

enum color {
      red, green, blue } c;
c = blue;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。

enum color {
      red, green=5, blue };

在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。

五、C++ 变量类型

变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。

类型 描述
bool 存储值 true 或 false。
char 通常是一个字符(八位)。这是一个整数类型。
int 对机器而言,整数的最自然的大小。
float 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。在这里插入图片描述
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。二、C++基础一(基本语法、程序结构、关键字、数据类型、变量类型和作用域、常量的使用)_第2张图片
void 表示类型的缺失。
wchar_t 宽字符类型。

C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等…
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。
二、C++基础一(基本语法、程序结构、关键字、数据类型、变量类型和作用域、常量的使用)_第3张图片

六、C++ 变量作用域

作用域是变量的一个有效区域,一般来说有三个地方可以定义变量:

1.在函数或一个代码块内部声明的变量,称为局部变量。

2.在函数参数的定义中声明的变量,称为形式参数。

3.在所有函数外部声明的变量,称为全局变量。

6.1 局部变量

局部变量只能被函数内部或者代码块内部的语句使用,如下面的变量只能在main()中使用

#include 
using namespace std;
int main ()
{
     
  // 局部变量声明
  int a, b;
  int c;
  // 实际初始化
  a = 10;
  b = 20;
  c = a + b;
  cout << c;
  return 0;
}

6.2 全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。也就是说,任何函数都可以使用这个全局变量,不过注意在不同.cpp文件中,访问全局变量需要声明。

#include 
using namespace std;
 
// 全局变量声明
int g;
extern void func(void);//函数声明 
int main ()
{
     
  // 局部变量声明
  int a, b;
  // 实际初始化
  a = 10;
  b = 20;
  g = a + b;
 
  cout << g << endl;//输出30
  func();
  cout << g << endl;//输出35
  return 0;
}

void func(void)
{
     
	g=g+5;
}

如果需要在其他文件中,使用g全局变量,要在其他文件中加入g变量的声明。
另外若局部变量和全局变量同名,在函数内,局部变量的值会覆盖全局变量的值:

#include 
using namespace std;
 
// 全局变量声明
int g=20;

int main ()
{
     
  // 局部变量声明
  int g=10;
  cout << g << endl;//输出10
  return 0;
}

注意:局部变量定义时,系统不会对其初始化,故若不初始化,局部变量会是一个随机值,容易造成问题;全局变量定义时,系统会将其初始化为0、’/0’或者NULL。

七、常量的使用

常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

7.1 整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

212         // 合法的
215u        // 合法的
0xFeeL      // 合法的
078         // 非法的:8 不是八进制的数字
032UU       // 非法的:不能重复后缀
/***********************************************/
85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数

7.2浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

在默认情况下,像8.24和2.4E8这样的浮点常量都属于double类型。如果希望常量为float类型,请使用f或F后缀。

3.14159       // 合法的 double
1.562F     	  // 合法的 float
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

7.3布尔常量

布尔常量共有两个,它们都是标准的 C++ 关键字:

true //代表真。
false //代表假。

不应把 true 的值看成 1,把 false 的值看成 0。

7.4字符常量

字符常量是括在单引号中。如果常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L’x’),此时它必须存储在 wchar_t 类型的变量中。否则,它就是一个窄字符常量(例如 ‘x’),此时它可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 ‘x’)、一个转义序列(例如 ‘\t’),或一个通用的字符(例如 ‘\u02C0’)。

7.5定义常量

在 C++ 中,有两种简单的定义常量的方式:
1.使用 #define 预处理器。
2.使用 const 关键字。
通过上诉两种方法,可以将某一个变量固定,编译器将不再修改该常亮的值,如:

#define MONTHS 12
const int Months = 12 ;

这两种方法,将MONTHS 和 Months 固定了为12,后续操作MONTHS 或 Months 就是操作12了。
注意:应在声明中对const进行初始化,如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。
对于C++中定义常量时,尽量使用const:

如果以前使用过C语言,您可能觉得前面讨论的#define语句已经足够完成这样的工作了。但const比#defien好。首先,它能够明确指定类型。其次,可以使用C++的作用域规则将定义限制在特定的函数或文件中(作用域规则描述了名称在各种模块中的可知程度,将在《C++ Primer_Plus第6版中文版》的第9章<内存模型和名称空间>讨论)。第三,可以将const用于更复杂的类型,如《C++ Primer_Plus第6版中文版》的第4章将介绍的数组和结构。

资料来自:菜鸟教程和《C++ Primer_Plus第6版中文版》

你可能感兴趣的:(C++学习,c++)