c++ 的const类型

原创 2016年08月28日 19:59:59

1、定义一个常量
const int name = value
2、定义一个常量指针或者定义一个指针指向一个常量
const char *pContent;
char* const pContent;
const char* const pContent;
前者是指针指向内容不能变化。第二句是指针本身不能变化。第三局是都不能变化。

class A
{
public:
    A(int param) {
        m_a = param;
    }
    int m_a;
};
void FuncChangeA(A* p) {
    p->m_a = 2;
}

int main()
{

    A * const pa = new A(3);
    FuncChangeA(pa);
    std::cout << pa->m_a << std::endl;//输出2,指针指向的内容可变。
    return 0;
}

3、类型转换
const的指针可以隐式转化为非const的。所以你如果函数的参数列表写作

void FuncChangeA(A* p)

则你赋给一个A* const pa是没有任何意义的。已经隐式转换为了普通的A* pa。内部你可以随意更改pa的指向。不过对函数外部不产生任何影响。

而指向const内容的指针不能隐式的转化为指向非const内容的指针。这种情况下,如果你将const A* pa赋给上述参数列表的程序,会产生参数列表错误的问题。

所有非const的量,都可以隐式的转换为const。你可以通过下面这种设计参数表的情况来避免自己犯错。
void f(const int i) { i=10;//error! }

4.const机制
这里写图片描述
用const和define定义的符号被称为符号常量。
全局的符号常量被存储在rdata区。显然被禁止更改。对于局部常量,编译器是在编译的时候进行检查来避免更改的,如果发现有更改的情况,编译器就会报错。

多说一句文字常量就是在语句中直接复制的。可以使数字,也可能是字符串。对于字符型文字常量,会存储到rdata区。而对于字符串型文字常量,可能会作为指令中的立即数进行编码。

c++中的引用类型和const

C++中的引用类型 先看一段代码: int ival = 1024; int &refVal = ival; // ok: refVal refers to ival int &refVa...
  • liquanfeng326
  • liquanfeng326
  • 2013年06月24日 19:33
  • 1154

C++ const函数返回值必须为const引用

编译正确代码: [html] view plain copy  print? #includestdio.h>   #include string....
  • dearwind153
  • dearwind153
  • 2016年07月23日 16:08
  • 642

[C++] 返回值为 const 类型的作用和什么时候用的注意!

返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数    按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何    的const或非const类型变量,完...
  • robby_chan
  • robby_chan
  • 2013年03月07日 10:31
  • 901

c/c++中const成员函数的返回值类型

const成员函数又称为访问函数,在const函数体内不能修改成员变量的值。 那么对于const函数的返回值呢? 结合网上内容,写了一个小的实验代码, class T{ public: struct...
  • u011567017
  • u011567017
  • 2017年01月05日 20:31
  • 650

c++类中const/static/const static成员变量初始化

一、类的const成员变量:        const修饰类的成员变量,表示成员常量,不能被修改,它只能构造函数在初始化列表中赋值,但是在支持c++14编译器中const成员变量的初始化可以在类中完成...
  • liuxiao2030
  • liuxiao2030
  • 2016年12月19日 22:31
  • 418

C++向函数模版传递 const类型,数组类型

1)向模版传递 const类型 template void fun(  T &a) { int s =100; T p = s; p+= 1; printf("%d \n",p); }...
  • cczlw
  • cczlw
  • 2012年09月22日 21:21
  • 604

C++类中const函数与非const函数的调用规则

class EX{ public: void constFunction() const; };如上所示,通过将类成员函数声明为const,以表示这个函数不可以修改类对象。任何...
  • u014630623
  • u014630623
  • 2016年05月01日 17:04
  • 2203

函数返回的临时对象为const类型,const引用

#include #include     using namespace std; class A { public: A(){ m_Int = 10; } publi...
  • damotiansheng
  • damotiansheng
  • 2014年02月17日 15:57
  • 2690

C、C++中使用const提高程序的健壮性和效率

C、C++中使用const提高程序的健壮性和效率
  • rl529014
  • rl529014
  • 2016年08月30日 02:56
  • 1213

类成员变量中存在引用,const,和指针类型时需要注意的事项

背景知识 编译器默认生成函数的规则如下: 1.定义一个类时,如果自己没有声明,那么编译器会自动帮助生成一个拷贝构造函数(copy construction),赋值操作符(copy assignment...
  • u012501459
  • u012501459
  • 2015年05月24日 15:06
  • 1180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ 的const类型
举报原因:
原因补充:

(最多只允许输入30个字)