const与constexpr

关于const型数据,谭浩强老爷子这么总结道:

 1 Time const t;  
 2 //t是常对象,其值在任何情况下都不能改变
 3 void Time::fun()const;  
 4 //fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员
 5 Time * const p;
 6 //p是指向Time类对象的常指针变量,p的指向不能改变
 7 const Time * p;
 8 //p是指向Time类常对象的指针变量,p指向的类对象的值不能通过p来改变
 9 const Time &t1 = t;
10 //t1是Time类对象t的引用,二者指向同一内存空间,t的值不能改变

在C++ Primer中文版第5版中,用了很大的篇幅来介绍const限定符。

其中介绍到了顶层const与底层const:

指针本身是一个对象,它又可以指向另外一个对象。因此指针本身是不是常量以及指针所指的是不是一个常量就是两个相互独立的问题。

用名词顶层const(top-level const)表示指针本身是一个常量,而用名词底层const(low-level const)表示指针所指的对象是一个常量。

更一般的,顶层const可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型、类、指针等。

底层const则与指针和引用等复合类型的基本类型部分有关。

此外,C++ Primer中还介绍了C++11的新特性:constexpr和常量表达式。

暂时不写。

原文地址:https://www.cnblogs.com/niuxichuan/p/5316909.html