详解C++中常量的类型与定义
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 整数常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。 212 // 合法的 215u // 合法的 0xFeeL // 合法的 078 // 非法的:8 不是八进制的数字 032UU // 非法的:不能重复后缀 以下是各种类型的整数常量的实例: 85 // 十进制 0213 // 八进制 0x4b // 十六进制 30 // 整数 30u // 无符号整数 30l // 长整数 30ul // 无符号长整数 浮点常量 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。 3.14159 // 合法的 314159E-5L // 合法的 510E // 非法的:不完整的指数 210f // 非法的:没有小数或指数 .e55 // 非法的:缺少整数或分数 布尔常量 布尔常量共有两个,它们都是标准的 C++ 关键字:
我们不应把 true 的值看成 1,把 false 的值看成 0。 字符常量 字符常量是括在单引号中。如果常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L'x'),此时它必须存储在 wchar_t 类型的变量中。否则,它就是一个窄字符常量(例如 'x'),此时它可以存储在 char 类型的简单变量中。
下面的实例显示了一些转义序列字符: #include <iostream> using namespace std; int main() { cout << "HellotWorldnn"; return 0; } 当上面的代码被编译和执行时,它会产生下列结果: Hello World 字符串常量 字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。 "hello,dear" "hello, dear" "hello," "d" "ear" 定义常量 在 C++ 中,有两种简单的定义常量的方式:
#define 预处理器 下面是使用 #define 预处理器定义常量的形式: #define identifier value 具体请看下面的实例: #include <iostream> using namespace std; #define LENGTH 10 #define WIDTH 5 #define NEWLINE 'n' int main() { int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; } 当上面的代码被编译和执行时,它会产生下列结果: 复制代码 代码如下: 50
const 关键字 您可以使用 const 前缀声明指定类型的常量,如下所示: const type variable = value; 具体请看下面的实例: #include <iostream> using namespace std; int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = 'n'; int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; } 当上面的代码被编译和执行时,它会产生下列结果: 复制代码 代码如下: 50 请注意,把常量定义为大写字母形式,是一个很好的编程实践。 常量的引用 关于引用的初始化有两点值得注意: (1)当初始化值是一个左值(可以取得地址)时,没有任何问题; (2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值。而且这个赋值是有一个过程的: 首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量。 例子: double& dr = 1; // 错误:需要左值 const double& cdr = 1; // ok 第二句实际的过程如下: double temp = double(1); const double& cdr = temp; 作函数参数时: // bc_temp_objects_not_bound_to_nonconst_ref.cpp // compile with: /EHsc #include "iostream" using namespace std; class C {}; void f(C & c) { cout << "C&" << endl; } void f(C const & c) { cout << "C const &" << endl; } int main() { f(C()); } 结果: 复制代码 代码如下: C const &
更直接的,用基本类型: #include <iostream> using namespace std; void display(int const &ref) {cout<<ref<<'n';} int main() { int i=1; display(i); int const anotheri=2; display(anotheri); display(2); display(1+2); display(static_cast<int>(3.14159)); } 通过C++常量引用从函数返回一个局部对象: 一般从一个函数返回一个局部对象的引用是不对的: T & my_op ( void ) { T t; return t; } // The T object t got destroyed here so the returned reference is not valid anymore. 特殊情况:返回一个常引用 const T & my_op ( void ) { T t; return t; } const T & my_t_obj = my_op (); 在这个情况下,局部变量 t 不会被直接析构,而是会保留到 my_t_obj 的生命周期结束为止。 总之,C++常量引用语法上可以引用一个临时变量。这种方法在使用引用作函数参数和返回局部变量时有意义。我目前看来常量引用主要用在作函数参数或保证不修改原变量的时候。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |