刚开始接触C++时,指针和const之间的关系有点混乱,现在总结如下:一、指向const变量的指针#include<iostream.h>
void main()
{constint *p=NULL;constint a=10;p=&a;cout<<"*p="<<*p<<endl;int b=100;p=&b;cout<<"*p="<<*p<<endl;//*p=200; 错误,不能通过修改指针来修改指针指向的内容b=200;cout<<"*p="<<*p<<endl;
}不能通过修改指针来修改指针指向的内容,但可以修改指针的指向。另一种形式:int const *p=NULL;二、const指...
转载:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.htmlC++const 关键字小结 const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 一、const修饰普通类型的变量。如下:1 const int a = 7;
2
3 int b = a; //it‘s right
4
5 a = 8; // it‘s wrong, a被定义为一个常量,并且可以将a赋值给b,但是不能给a再次赋值。对一个...
C++ 在C的基础上对const 进行了进化处理 --当碰见const声明时在符号表中放入常量 --编译过程中若发现使用常量则直接以符号表中的值替换 --编译过程中若发现下述情况则给对应的常量分配存储空间 对const 常量使用了extern 对const 常量使用 & 操作符 注意:C++编译器虽然可能为const 常量分配空间,但不会使用其存储空间中的值。 C++中的const常量类似于宏定义 -const int c; ≈ #define c 5 但是有区别因为宏是没有类...
我们都知道const成员函数只能调用非const成员函数但是有的时候,我们为了代码复用
例如:T operator[](int i) const;T& operator[](int i);
为了实现const和非const两个版本,我们选择使用重载,但是里面的内容可能是相同的,为了代码复用可以: T& operator[](int i) {if( (i >= 0) && (i < m_length) ) {return m_array[i];}else {THROW_EXCEPTION(IndexOutOfBoundsException, "T& operator[](int i) i");}}T operator[](int i...
C++中的const关键字的使用方法很灵活,而使用const将大大改善程序的健壮性,本人依据各方面查到的资料进行总结例如以下,期望对朋友们有所帮助。Const 是C++中经常使用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 例如以下表所看到的:No.作用说明參考代码1能够定义const常量const int Max = 100; 2便于进行类型检查 const常量有数据类型,而宏常量没有数据类...
一、文章来由const具体解释之二二、const 取代 #defineconst最初动机就是取代 #define。const 优于 #define:
(1) #define没有类型检查,const在编译期(而不是预编译期)做类型检查。(2)const方便调试和定位bug。所以应该全然用const取代#define三、头文件里的const(1)要使用const取代#define。相同须要把const定义放进头文件(或其它格式文件,include就可以)。这样通过包括头文件。可把const定义单独放在一个地方并把它...
问题如下所示有两个cxx源文件, 分别定义与使用一个const变量. 将其一起编译时报错: undefined reference of ‘meow::miao‘.[01:06:44] hansy@hansy:~/testcase$ cat 1.cc
namespace meow {const int miao = 1;
}
[01:06:47] hansy@hansy:~/testcase$ cat 2.cc
namespace meow {extern const int miao;
}using namespace meow;
int main() {return miao;
}
[01:06:49] hansy@hansy:~/testcase$
[01:06:52] hansy@hansy:~/testca...
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,constchar blank=‘‘;
blank=‘\n‘; //错误面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员。若要修改类对象,应调用公有成员函数来完成。为了保证const对象的常量性,编译器须区分不安全与安全的成员函数(即区分试图修改类对象与不修改类对象的函数)。例如,const Screen blankScreen; //Sc...
const修饰符使用const修饰变量时,该变量的值不可修改,因此需要初始化。例如 const int s = 0;此时s为值不可变的变量。那么基于此,当const修饰指针时的情况有三种:(1)const int *p;此时const修饰的是 *p 而非 p,因此,*p的值不可变,而p的值是可变的,所以可不对p进行初始化。例如,int s = 0,t = 1;const int *p;p = &s;cout<<*p<<endl;p = &t;cout<<*p<<endl;以上代码输出:01但此时,无论p指向s或者t,均不能通过 *p 修...
在类中,有时候为了避免误操作而修改了一些人们不希望被修改的数据,此时就必须借助const关键字加以限定了。借助const关键字可以定义const类型的成员变量、成员函数、常对象以及对象的常引用。const成员变量const成员变量其用法和普通的const变量用法相似,在定义时只需在前面加上const关键字即可。const成员变量的初始化只有唯一的一条途径:参数初始化表。这个在前面已经提到过,不记得的话可以再去翻看参数初始化表那一小节。co...
top-level constAs we’ve seen, a pointer is an object that can point to a different object. As a result, we can talk independently about whether a pointer is const and whether the objects to which it can point are const. we use the top-level const to indicate that the pointer itself is a const. When a pointer can point to a const object, we refer to that const as a low-level const.More generally, ...
定义 const关键字的作用是对变量的类型加以限定。被const修饰的变量值不可改变(初始化后不可以再被赋值),例如:const int num1 = 1;
num1 = 1; //错误const表示变量是不可写的,但是这并不影响变量的可读性:const int num1 = 1;
int num2 = num1; //正确,可以使用常量对象进行拷贝初始化
const引用 使用const修饰的引用称为对常量的引用,实际上是将引用绑定到一个常量对象上。const int num1 = 1;
const int &r1 = num1; //正...
我们在C++中使用STL的容器时,经常会用到迭代器。使用迭代器可以很方便的进行容器元素遍历和修改等操作。近日,在使用Visual Studio 2015编程的时候发现,set的迭代器直接就是const_iterator类型,而vector的迭代器则是普通的iterator类型,这是为什么呢?今天就和大家一起来探究一下。Set/Map类型1set<int>::iterator it1;
2 map<int,int>::iterator it2;
3 it1 = set1.begin();
4 *it1 = 1;在Visual Studio 2010版本以上,声明一...
一. 为什么需要常量 (1)如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦:1. 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。2. 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。3. 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。 (2)尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。...
一个常量成员函数(const member function), 可以读取类的数据成员,但不能修改类的数据成员。1 声明 在成员函数声明的参数列表后,加上 const 关键字,将其声明为常量成员函数(const member function),表明其不被允许修改类的数据成员 下面定义了一个 Date 类,分别以年、月、日的形式来表示日期class Date {
public:int day() const { return d; }int month() const { return m; }int year() const;void add_year(int n); //...