const int i=24;
一般来说,如果你认定变量是一个常量表达式,那就把它声明为constexpr类型。
constexpr int i=24;
2.const 的变量可以初始化不是const的变量。
//下面情况都是正确的
const int j = 10;
int i = j;
cout <<"const初始化no_const类型变量:" << i << endl;
int k = 10;
const int v = k;
cout <<"no_const类型变量初始化const变量:" << k << endl;
3.常量引用,不允许修改值
int i=0;
const int& r2=i; //r2是常量引用,不允许r2修改i的值
4.指针常量与常量指针
int i=0;
//指针常量,不允许修改指针的指向,但可以通过p修改i的值
int* const p=&i;
//常量指针,允许修改指针的指向,但是不允许通过pj修改i的值
const int* pj=&i;
//不允许修改指针的指向,不允许通过pi修改i的值。
const int* const pi=&i;
5.函数中的const
//可以读取i,但是不能够修改i的值
//可以传入const int 也可以传入 int
void fun(const int i)
{
}
//这个函数会和上面的函数重复定义。
void fun(int i)
{
}
const T 对象可以用T或者const T 对象初始化。
而 T对象只能通过 T对象初始化。
//fun1()为成员函数
void fun1( int i) const
{
}
extern double pi=3.1415926;
class Test {
private :
int x;
double y;
public:
Test(int xx):x(xx),y(0.0){}
Test(double yy):x(1),y(yy){}
};
class Test1 {
private:
int x;
double y;
public:
explicit Test1(int xx) :x(xx), y(0.0) {}
explicit Test1(double yy) :x(1), y(yy) {}
};
只能通过显示的转换。
int x = 10;
double j = static_cast<double>(x);
const char* pc;
char* p=const_cast<char*>(pc);
//下面代码是错误的,不能修改基础类型
char p = 'a';
char* pi = const_cast<char*>(p);