C++学习13——const

变量加上const 后仍然是变量,初始化之后不能赋值,不能修改。

const int x=123;
x=27;//错误
x++;//错误

int y=x;//正确,将const赋值给non-const
y=x;//正确,同上,non-const可以修改

const int z=y;//正确,const赋值给const,但是z之后不可以再被赋值或者修改了

const int bufsize=1024;必须要预先初始化,除非加上extern

extern const int bufsize;编译器编译到这不知道值大小

全局变量声明,在这儿不用赋值,只是证明bufsize存在,可以使用,在这儿不能修改

外面的bufsize在这儿是const,不能修改,但是外面的bufsize本身并不一定是const,也并不一定不能修改。

const int class_size=12;//编译时刻这个值是知道的
int finalGrade[class_size]; //正确

int x;
cin>>x;
const int size=x;//编译时刻这个值不知道大小,只有运行时刻才知道
double classAverage[size]; //错误
char * const q = "abc";//q is const,指针本身是const,但是所指向的那块内存单元不是const
*q='c';//正确
q++;//错误

const char *p="ABCD";//(*p) is a const char,指针p本身不是const,不能通过指针p修改所指的内存单元,并不意味着那个变量就是const了,不是说指针p指向哪里,哪里就变成了const。准确说法为p所指的对象不能通过它修改的指针
*q='b';//错误 (*p) is the const
p++;//正确
Person p1("Fred",200);
const Person* p=&p1;//对象是const
Person const* p=&p1;//对象是const
Person *const p=&p1;//指针是const
//区别的标记是const在*的前面还是后面
//const在*的前面,对象是const;const在*的后面,指针是const
const Person *const p=&p1;//对象和指针都是const
int * ip;
const int *cip;

int i;

ip=&i;
cip=&i;

const int ci=3;
ip=&ci;//错误,non-const指针不能指向const值
cip=&ci;

*ip=54;//正确
*cip=54;//错误,因为cip=&ci;cip指向const值

 a.cpp

#include<iostream>
using namespace std;
int main(){
    char *s="hello world";//默认为const,"hello world"被放在代码段里,而代码段是不可写的 此时有warning
    cout<<s<<endl;
    //s[0]='B';会报错
    return 0;
}
--------------------------------------------------
#include<iostream>
using namespace std;
int main(){
    const char *s="hello world";//warning会消失,这个s在代码里
    cout<<s<<endl;
    return 0;
}
-------------------------------------------------
#include<iostream>
using namespace std;
int main(){
    char s[]="hello world";//s[]数组,整个数组在堆栈里,将代码段里的"hello world"拷贝到堆栈里,这个s在堆栈里
    cout<<s<<endl;
    s[0]='B';
    return 0;
}
void f(const int* x);
int a=15;
f(&a);  //正确
const int b=a;

f(&b);  //正确
b=a+1;  //错误
void f1(const int i){
    i++;//错误,不能在f1里修改
}
int f3() { return 1; }
const int f4(){return 1;}
int main(){
    const int j=f3();//正确
    int k=f4();//正确,const值可以赋值给non-const值
}

const Currency the_raise(42,38)整个对象是const,则整个对象里的值都不能修改。

int Date::set_day(int d){
    day=d;//正确
}
int Date::get_day() const{//声明和定义都需要加上const
    day++;//错误,不能改变
    set_day(12);//错误
    return day;//正确
}
int get_day() const;
int get_day() const{ return day;}//成员函数不能在定义里修改数据
//声明和定义都需要加上const

const 成员函数比const 对象安全 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值