C++基础学习之变量名实例讲解
第3章处理数据
本章内容包括:
lc++变量的命名规则
lc++内置整型——unsigned long、long、unsigned int、int、unsigned short、short、char、unsigned char、signed char和bool。
lc++11新增的整型:unsigned long long 和long long。
l表示各种整型的限制的climits文件。
l各种整型的数字字面值(常量)。
l使用const限定符来创建符号变量。
lc++内置的浮点类型——float、double和long double。
l表示各种浮点类型的系统限制的cfloat文件。
l各种浮点类型的数字字面值。
lc++的算数 运算符。
l自动类型转换。
l强制类型转换。
面向对象(oop)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型于数据匹配。如果正确做到这一点,将会发现以后使用数据时会容易得多。然而,在创建自己的类型之前,必须了解并理解c++内置的类型,因为这些类型是创建自己类型的基本。
内置的c++类型分两组,基本类型和复合类型。本章将介绍基本类型,即整数和浮点数。似乎只有两种类型,但c++知道,没有任何一种整型和浮点型能够满足所有的编程要求,因此对于这两种数据,它提供了多种变体。第4章将介绍在基本类型的基础上创建的复合类型,包括数组、字符串、指针和结构。
当然,程序还需要一种表示存储的数据方法,本章将介绍这样一种方法——使用变量,然后介绍如何在c++中进行算数运算,最后,介绍c++如何将值从一种类型转换为另一种类型。
3.1 简单变量
程序通常都需要存储信息——如google股票当前的价格、纽约市8月份的平均湿度、美国宪法中使用最多的字母机器相对使用频率或猫王模仿者的数量。把信息存储在计算机中,程序必须记录3个基本属性:
l信息将存储在哪里;
l要存储什么值
l存储何种类型的信息。到目前为止,示例采用的都是声明一个变量。声明中使用的类型描述了信息的类型和通过符号来表示其值的变量名,例如,假设实验室首席助理igor使用了下面的语句:
int braincount;
braincount=5;
这些语句告诉程序,它正在存储整数,并使用名称braincount来表示该整数的值(这里为5).实际上,程序还将找到一块能够存储整数的内存,将该内存单元标记为braincount,并将5复制到该内存单元中:然后,您可以在程序中使用braincount来访问该内存单元。这些语句没有告诉您,这个值将存储在内存的什么位置,但程序确实记录了这种信息。实际上,可以使用&运算符来检索braincount的内存地址。下一章介绍另一种标识数据的方法(使用指针)时,将介绍这个运算符。
3.1.1 变量名
c++提倡使用有一定含义的变量名,如果变量标识差旅费,应将其命名为cost_of_trip或costoftrip,而不要将其命名为x或cot。必须遵循几种简单的命名规则。
l在名称前至呢功能使用字母字符、数字和下划线(_)
l名称的第一个字符不能是数字
l区分大写字符与小写字符
l不能将c++关键字用作名称。
l以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
lc++对于名称的长度没有限制,名称中所有的而字符都有意义,但有些平台有长度限制
倒数第二点和前面几点有些不同,因为使用像_time_stop或_dount这样的名称不会导致编译器错误,而会导致行为的不确定性。换句话说,不知道结果将是什么。不出现编译器错误的原因是,这样的名称不是非法的,但要留给实现使用。全局名称指的是名称被声明的位置。这将在第4章讨论。最后一点使得c++与ansi c(c99标准)有所区别,何种只保证名称中的前63个字符有意义(在ansi c 中,前63个字符相同的名称被认为是相同的,即使64个字符不同)。
下面是一些有效和无效的c++名称:
int poodle; //有效
int poodle; //有效
int poodle; //有效
int terrier; //无效
int my_stares3; //有效
int _mystears3 ; //有效但最好不这么做
int 4ever ; //无效
int double; //无效
int begin; //有效
int _fools; //有效但最好不这么做
int the_very_best_vartable_l_can_be_version_112 //有效
int honky-tonk //无效
如果想用两个或更多的单词组成一个名称,通常的做法是用下划线字符将单词分开,如int my_stares3或者从第二个单词开始将每个单词的第一个字母大写,如costoftrip。(c程序员倾向于按c语言的方式是用下划线,而pascal程序员喜欢采用大写方式)这两种形式都很容易将单词区分开,如cardrip和cardrip或者boat_sport和boats_port。
命名方案
变量命名方案于函数命名方案一样,也有很多话题可供讨论。确实,该主题会引发一些最尖锐的反对意见。同样,和函数名称一样,只要变量名合法,c++编译器就不会介意,但是一致、精准的个人命名约定是很有帮助的。
与函数命名一样,大写在变量命名中也是一个关键问题(“参见第二章的注释命名约定”),但很多程序员可能会在变量名中加入其他信息,即描述变量类型或内容的前缀。例如,可以将整型变量myweight命名为nmyweight,其中前缀n用来标识整数值,在代码或变量定义不是十分清楚的情况下,前缀很有用。另外,这个变量也可以叫做intyweight,这将更精准,而且容易理解,不过它多了几个字母(对于很多程序员来说,这是非常讨厌的事情)。常以这种方式使用其他前缀有:str或sz(表示以空字符结束的字符串)、b(表示布尔值)、p(表示指针)、c(表示单个字符)。
随着对c++的逐步了解,将发现很多有关于前缀命名风格的示例(包括漂亮的m_ipctstr前缀——这是一个类成员值,其中包含了指向常量的长指针何以空字符结尾的字符串),还有其他更奇异、更违反直觉的风格,采不采用这些风格,完全取决于程序员。在c++所有主观风格中,一致性和精度是最重要的。请根据自己的需要、喜好和个人风格来使用变量名(或必要是,根据雇主的需要、喜好和个人风格来选择变量名)。m