- 浏览: 664526 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sztime:
可以在文本框上绑定事件来禁用回车键, 我就是这样做的.在IE中 ...
form 回车自动提交问题 -
damoqiongqiu:
非常好的文章,很透彻不过有一句话小僧腆着脸补充一下:“1111 ...
为什么要用补码来做存储 -
wuyizhong:
原来如此啊。
form 回车自动提交问题 -
luliangy:
谢楼主~!
用C语言扩展Python的功能 -
kwong:
很有用,谢谢
火狐和IE 对css 样式解释的差异
对于基本声明
1. const int r=100; //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换
2. extend const int r=100; //将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义
3. const int r[ ]={1,2,3,4};
struct S {int a,b;};
const S s[ ]={(1,2),(3.4)}; //以上两种都是常量集合,编译器会为其分配内存,所以不能在编译期间使用其中的值,例如:int temp[r[2]];这样的编译器会报告不能找到常量表达式
对于指针
1. const int *r=&x; //声明r为一个指向常量的x的指针,r指向的对象不能被修改,但他可以指向任何地址的常量
2. int const *r=&x; //与用法1完全等价,没有任何区别
3. int * const r=&x; //声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址的内容可以修改
4. const int * const r=&x; //综合1、3用法,r是一个指向常量的常量型指针
对于类型检查
可以把一个非const对象赋给一个指向const的指针,因为有时候我们不想从这个指针来修改其对象的值;但是不可以把一个const对象赋值给一个非const指针,因为这样可能会通过这个指针改变指向对象的值,但也存在使这种操作通过的合法化写法,使用类型强制转换可以通过指针改变const对象:
const int r=100;
int * ptr = const_cast<int*>(&r); //C++标准,C语言使用:int * ptr =(int*)&r;
对于字符数组
如char * name = “china”; 这样的语句,在编译时是能够通过的,但是”china”是常量字符数组,任何想修改他的操作也能通过编译但会引起运行时错误,如果我们想修改字符数组的话就要使用char name[ ] = “china”; 这种形式。
对于函数
1. void Fuction1 ( const int r ); //此处为参数传递const值,意义是变量初值不能被函数改变
2. const int Fuction1 (int); //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字。但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义类型,返回值是常量是非常重要的,见下面条款3。
3. Class CX; //内部有构造函数,声明如CX(int r =0)
CX Fuction1 () { return CX(); }
const CX Fuction2 () { return CX(); }
如有上面的自定义类CX,和函数Fuction1()和Fuction2(),我们进行如下操作时:
Fuction1() = CX(1); //没有问题,可以作为左值调用
Fuction2() = CX(1); //编译错误,const返回值禁止作为左值调用。因为左值把返回值作为变量会修改其返回值,const声明禁止这种修改。
4. 函数中指针的const传递和返回:
int F1 (const char * pstr); //作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的初值,这里在函数内部任何修改*pstr的企图都会引起编译错误。
const char * F2 (); //意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指向const对象的指针。
const char * const F3(); //比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明了这个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理。
5. 函数中引用的const传递:
void F1 ( const X& px); //这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本,然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效。
**另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性,且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙。
对于类
1. 首先,对于const的成员变量,只能在构造函数里使用初始化成员列表来初始化,试图在构造函数体内进行初始化const成员变量会引起编译错误。初始化成员列表形如:
X:: X ( int ir ): r(ir) {} //假设r是类X的const成员变量
2. const成员函数。提到这个概念首先要谈到const对象,正象内置类型能够定义const对象一样(const int r=10;),用户自定义类型也可以定义const对象(const X px(10);),编译器要保证这个对象在其生命周期内不能够被改变。如果你定义了这样的一个const对象,那么对于这个对象的一切非const成员函数的调用,编译器为了保证对象的const特性,都会禁止并在编译期间报错。所以如果你想让你的成员函数能够在const对象上进行操作的话,就要把这个函数声明为const成员函数。假如f( )是类中的成员函数的话,它的声明形如:
int f( ) const; //const放在函数的最后,编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法
**类的构造和析构函数都不能是const函数。
3. 建立了一个const成员函数,但仍然想用这个函数改变对象内部的数据。这样的一个要求也会经常遇到,尤其是在一个苛刻的面试考官那里。首先我们要弄清楚考官的要求,因为有两种方法可以实现,如果这位考官要求不改变原来类的任何东西,只让你从当前这个const成员函数入手,那么你只有使用前面提到的类型强制转换方法。实例如下:
//假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函数f( )来对这个r进行++r操作,代码如下
void X::f( ) const
{ (const_cast<X*>(this)) -> ++r; } //通过this指针进行类型强制转换实现
另外一种方法就是使用关键字:mutable。如果你的成员变量在定义时是这个样子的:
mutable int r ;
那么它就告诉编译器这个成员变量可以通过const成员函数改变。编译器就不会再理会对他的检查了。
发表评论
-
strlcpy 的历史
2012-11-05 18:51 711strlcpy 并不属于 ANSI C,至今也还不是标准 ... -
c中的移位操作
2012-04-12 18:18 1013位移位运算符是将数据看成二进制数,对其进行向左或向 ... -
为什么要用补码来做存储
2012-04-12 18:02 2242看了些补码的知识,摘抄了些,自己整理了些。 顺便带着两个 ... -
google test 使用
2009-01-03 13:59 3554安装: 下载Google C++ Testi ... -
string 的 data() 和c_str()
2008-12-24 01:17 1258data 是字符数组,里面有 '\0 '当然也不会 ... -
C/C++ unit testing tools (18 found)
2008-12-19 01:27 1980C/C++ unit testing tools (18 f ... -
climits中的符号常量
2008-12-10 11:43 1153climits中的符号常量 符号常量 ... -
ICE初次
2008-09-02 01:48 1902按照某人的说法:跨平台的C++网络编程ICE才是王道。于是,我 ... -
对 pthread_cond_wait 的错误理解
2008-08-28 15:52 2100在线程的调度中经常会用到 pthread_cond_wait ... -
环形缓冲
2008-08-27 17:20 962/** * Copyright (c) 2008, ×××研 ... -
Linux下C语言编程的 RPC远程调用编程
2008-07-17 15:38 3424在查看libc6-dev软件包提供的工具(用 dpkg -L ... -
C++中重载操作符时什么时候定义成友元,什么时候定义为成员方法
2008-07-10 18:05 3552在C++语言中,可以用关键字operator加上运算符来表示函 ... -
c++中的存储类型
2008-07-06 00:46 1923存储类型是从变量的存 ... -
libevent 一个time server
2008-05-19 11:20 1307#include <netinet/in.h> # ... -
自己动手改写komodo sourcetree插件 对C/C++的支持
2008-04-16 22:11 1405其实很简单了, 找到sourcetree.js 的 ... -
GNU C的 __attribute__ 机制
2008-04-15 15:34 776GNU C 的一大特色(却不被初学者所知)就是 __attri ... -
module的认识和写法
2008-04-15 15:29 722不知道在什幺时候,Linux 出现了 module 这种东西, ... -
dynamic_cast、static_cast、const_cast 和 reinterp
2008-04-10 15:16 1393dynamic_cast、static_cast、co ... -
static_cast、dynamic_cast、reinterpret_cast、和const_c
2008-04-10 15:14 6244static_cast、dynamic_cast、reinte ... -
关于Linux下C/C++程序编译
2007-08-23 18:15 3688在编译之前我们需要 ...
相关推荐
本文将深入探讨`const`在C++中的各种应用,帮助你更好地理解和运用这一关键概念。 1. 常量声明: `const`关键字用于声明常量变量,一旦赋值后,其值不能被改变。例如: ```cpp const int a = 5; // 声明一个整型...
本文将深入探讨`const`关键字的各种用法和其背后的原理,帮助读者更全面地理解和应用这一特性。 #### 一、基本常量声明 `const`关键字可以用来声明不会改变的常量。常量声明有两种常见的格式: ```cpp const ...
5. const 在函数声明中的应用 const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰整个函数。例如: ```c A& operator=(const A& a); void fun0(const A* a ); void fun1( ) const; // fun1( ) 为类...
本文将详细介绍 `const` 在 C++ 中的各种应用场景,并给出具体的示例以便于理解。 #### 二、const修饰普通变量和指针 `const` 可以用来修饰变量、指针等,使它们成为不可变的常量。在修饰普通变量时,无论 `const`...
5. Const在函数声明中的应用 Const也可以用来修饰函数的返回值或某个参数,例如: A& operator=(const A& a); void fun0(const A* a ); void fun1( ) const; 这里,fun1()函数为类成员函数,const修饰的是整个...
2. 类型检查:当`const`应用于函数参数时,编译器会确保该参数在函数内部不会被修改,如`void f(const int i)`。这样可以防止程序员无意或错误地改变不应改变的值。 3. 避免魔法数字:通过`const`定义的常量,可以...
通过本文的介绍,我们了解了C++中`const`关键字的基本概念及其在定义常量、处理指针、函数参数与返回值、类成员等场景下的具体应用。正确使用`const`不仅能够提升代码的质量,还能够在一定程度上提高程序的性能。...
### C++中的const限定修饰符 #### 一、引言 在C++编程语言中,`const`关键字是一个非常重要的特性,它可以帮助开发者确保某些数据或对象在其生命周期内的不变性,从而提高代码的安全性和可维护性。本文将详细介绍`...
关于`const`在C++中的用法,是一个深入理解C++编程语言的关键点。`const`关键字在C++中主要用于声明常量或者指定某个变量、指针或成员函数的某些特性不可修改,它增强了代码的安全性和可读性,同时也提高了程序的...
`const char*`是用于表示8位ASCII字符的指针,通常用于C和C++中的文本操作。ASCII字符集只包含128个字符,包括英文、数字和一些特殊符号。另一方面,`LPCWSTR`(Long Pointer to Constant Wide String)是指向一个不...
`const`还可以应用于指针,表示指针所指向的数据不可更改或者指针本身不可更改。具体分为以下几种情况: 1. **指向常量的指针**:指针指向的数据不可更改,但指针本身可以指向其他位置。 ```cpp int data = 5; ...
本文将详细介绍`const`关键字的用法及其在不同场景下的应用。 #### 二、`const`关键字的基本概念 `const`关键字用于指定某个实体是常量,这意味着该实体一旦被赋值后就不能再被修改。它可以用来修饰变量、指针、...
C++中的const变量 C++语言中的const变量是一种重要的概念,它可以用来定义常量,限制变量的修改权限。下面将详细介绍C++中的const变量。 1. const关键字的作用 const关键字用于定义常量,防止变量的修改。const...
### C++中const用法详解 #### 一、引言 在C++编程语言中,`const`关键字具有非常重要的作用。它可以帮助开发者确保代码的稳定性与...此外,深入理解`const`的作用及其应用场景对于编写高效稳定的C++程序至关重要。
### C++中`const`关键字的详尽解析与应用实例 #### 一、`const`基本用法 **1.1 限定符声明变量只能被读** `const`关键字用于声明一个只读变量,这意味着一旦该变量被初始化后,其值就不能被更改。例如: ```cpp ...
### C++中Const关键字的理解与应用 #### 一、Const关键字的基本概念 在C++编程语言中,`const`关键字是一种类型限定符,用于声明常量或者指定对象的一部分为不可变。通过`const`关键字,程序员可以明确指出某些...
`const`关键字在C++中具有广泛的应用,不仅限于修饰常量。正确使用`const`可以提高代码的可读性、可靠性和效率。在设计函数接口时,合理利用`const`来修饰参数和返回值是非常有益的实践。通过本篇文章的介绍,希望...
在C++编程中,`const`关键字扮演着至关重要的角色,其应用远超于简单的常量定义。`const`的全称是constant,意为“恒定不变”,它主要用于保护变量或函数的部分特性免受意外修改,从而增强程序的稳定性和可读性。...
本文将详细介绍`const`在C++中的各种应用场景,并通过具体的例子来加深理解。 #### 二、`const`修饰普通变量和指针 在C++中,`const`可以用于声明不可修改的变量或指针。以下是一些常见的用法: 1. **修饰普通变量...