C++学习笔记——常量定义

常量是定义以后,在程序运行中值不能被改变的标识符。C++中定义常量可以用#define 、const 这两种方法。例如:

#define PRICE 10	//定义单价常量10
const int PRICE = 10; //定义单价常量10
其实用常量是有它的理由的,下面我们来看下面两段程序对比代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <iostream>
using namespace std;

#define PI 3.14159
//const double PI = 3.14159;

int main(int argc, char* argv[])
{

    double square = 0,volume =0, radius=0;

    cout<<"请输入半径长度"<<endl;
    cin>>radius;

    square = 3.14159 * radius * radius;

    cout<<"半径长度为:"<<radius<<"的圆面积是:"<<square<<endl;

    volume = 4 * 3.14159 * radius * radius * radius /3;
    cout<<"半径长度为:"<<radius<<"的球体积是:"<<volume<<endl;
} 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <iostream>
using namespace std;

#define PI 3.14159
//const double PI = 3.14159;

int main(int argc, char* argv[])
{

    double square = 0,volume =0, radius=0;

    cout<<"请输入半径长度"<<endl;
    cin>>radius;

    square = PI * radius * radius;

    cout<<"半径长度为:"<<radius<<"的圆面积是:"<<square<<endl;

    volume = 4 * PI * radius * radius * radius /3;
    cout<<"半径长度为:"<<radius<<"的球体积是:"<<volume<<endl;
} 显然如果我还要求球、圆柱体的面积等,用常量的好处就显而易见,用常量的有下面一些好处:
1:增强程序的可读性。用一个有意义的常量代替一串无意义的字符串,显然很多时候程序员忘了或是不理解这一串字符串代表什么意义。
2:如果很多地方用到像PI(3.14159)这样的常量,难保输入错误,尤其复杂的很长的字符串时,而用常量则能一改而全部改变、减少出错的几率。

其中#define是定义宏变量,它其实是在编译之前,由预处理指令把代码里面的宏变量用指定的字符串替换,它不做语法检查,而constant 则是定义含有变量类型的常量。一般说来推荐使用constant定义常量,它在编译时会做语法检查。Effective c++ 的条款1中:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。而且有时候用宏,会出现意想不到的输出结果。

#define 与 const 的比较

(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。

(2) 有些集成化的调试工具可以对 const 常量进行调试,  但是不能对宏常量进行调试。
时间: 2024-10-23 01:36:17

C++学习笔记——常量定义的相关文章

PL/SQL学习笔记-常量变量及数据类型初步

一:常量和变量 开始之前,还是照例做个经典的例子,如下: declare mydate varchar2(16) := 'hellow world'; begin dbms_output.put_line(mydate); end; declare是声明部分我在这个部分声明了varchar2类型的变量,名字叫mydata,内容是hellow world,长度是16个长度.begin-.end 部分是执行部分我在这里调用了oracle已有的过程dbms_output.put_line,这个过程起到

C++学习笔记-类定义的注意事项和C#的区别

1:类当中的一批函数可以被一个public关键字引导来标明这些函数是公开的 2:成员函数可以放在类的外部定义但必须在类的内部做声明在类外部做定义的时候必须形如这样:bool YorClassName::YorMethordName(int param){//....return true;}就如同C#中的完全限定名YorClassName::YorMethordName如果在类中定义成员函数的话,就不用这样了 3:创建一个对象完全可以不用new形如:YorClassName target;tar

PHP之变量、常量学习笔记

亲密接触PHP之变量.常量学习笔记(阅读笔记自PHP手册) PHP 中一个美元符号($)后面跟上一个变量名称,即表示一个变量.变量的名称是对大小写敏感的.其中变量名允许数字或下划线打头. 有关变量的传地址赋值 PHP 3 中,变量总是传值赋值.PHP 4 提供了另外一种方式给变量赋值:传地址赋值.使用传地址赋值,即简单地追加一个(&)符号到将要赋值的变量前(源变量).这意味着新的变量简单的引用了原始变量,改动新的变量将影响到原始变量,反之亦然. <?php$foo = ''Bob'';$ba

MySQL学习笔记之数据定义表约束,分页方法总结_Mysql

本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法.分享给大家供大家参考,具体如下: 1. primary key 主键 特点:主键是用于唯一标识一条记录的约束,一张表最多只能有一个主键,不能为空也不能重复 create table user1(id int primary key,name varchar(32)); mysql> insert into user1 values(1,'hb'); Query OK, 1 row affected (0.10 sec) mysql>

C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

类型判断符号:   C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 instanceof 符号判断   类与接口的继承:    C#:public class MDataRow : List<MDataCell>, IDataRecord, ICustomTypeDescriptor Java:public class MDataRow extends ArrayLi

php5学习笔记(转)

php5|笔记 作者: whhwq在phpv.net看到的感觉不错/*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正.   PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL-Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以

C++内存管理学习笔记(3)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:wdzxl198@163.com    /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9078965 /**********************