c++中const用法大全



1、

const 修饰普通变量

const修饰一个变量,意思就是这个变量是一个常量,不能被改变

const int x;              //x是一个整形常量

const double x;        //x 是一个double型常量

const 修饰的是一个指针时:

const int *x;          //x 是一个指向常量整形的指针

int *const x;        //x 是一个常量指针。

const int *const x ;          //x 即是一个常量指针,也指向一个常量

x在*右边就表示是一个常量指针 , 在*左边就表示指向一个常量。

STL中的迭代器是以指针塑模出来的 , 所以迭代器的作用和T *差不多。

当我们用 const 去修饰一个迭代器时:

const vector<int>::iteator it;           //it是一个常量的迭代器,不能改变这个迭代器的指向,但能改变这个迭代器指向的值。

如果需要迭代器指向的东西不能被改动,如下:

vector<int>::const_iterator it;

2、

const修饰函数形参

<span style="font-size:14px;">int &fun(const int x);</span>
<span style="font-size:14px;"></span>

<span style="font-size:14px;">函数的形参是一个普通的const变量:
    1、 如果函数返回值一个non-const引用 , 那么就不能返回 x;
    2、 x 的值在函数中不能被改变 , 非常量指针不能指向它 , 非常量引用也不能引用该变量。</span>
<span style="font-size:14px;">int &fun(const int x)
{
    int *z = &x;    //错误的
    int *const z1 = &x;    //错误的,因为z1不是一个指向常量的指针
    const int *z2 = &x      //正确的
    int &z3 = x;        //错误的, 因为z3不是一个常量引用
    const int &z4 = x;       //正确的

    return x;  //错误的 , 不是一个常量引用
}</span>

如果形参是 const指针 或者 const引用 , 和上面的普通常量变量用法一样。

3、const修饰成员函数

注意:只能成员函数才能被 const修饰 , 其他函数都不能被const修饰。

const修饰后的成员函数的注意点:

1、 在const成员函数中 , 类中的所有变量都含有const属性 , 而指针的const属性 , 是指指针本身是一个常量指针。

2、 因此在const成员函数中 , 不能non-const引用和non-const指向 ,类中的变量(除引用指针所指的值)

3、 两个成员函数如果只是常量性不同,是可以被重载的。

<span style="font-size:14px;">class xy
{
public:
    xy():z(new char[10])  {}
    xy(char *new_z)
    {
        int n = strlen(new_z);
        z = new char[n+1];
        strcpy(z , new_z);
    }
    const char &operator [](int si) const;
    char &operator [](int si);

private:
    char *z;
    int x;
    double y[10];
};

const char &xy::operator[](int si) const
{

    cout<<"const"<<endl;
    return *(z+si);
}

char &xy::operator[](int si)
{
    cout<<"no-const"<<endl;
    return const_cast<char &>(
        static_cast<const xy&>(*this)[si]
    );
}
</span>

在类中 , 经常出现通过const属性重载的两个函数,如果这两个函数功能完全一样,那么我们为了避免代码重复,往往都会让non-const 版本的函数去调用 const版本的函数

如上面例子中的 operator[] 函数。

这个时候就要用到const_cast 和static_cast两个强制转行的类型

const_cast:去除变量的const属性。

const int x;

int &y = const_cast<int &>(x);

static_cast: 普通变量之间的强制转换、给一个变量添加上const 属性

int x;

double y = static_cast<double>(x);

c++中const用法大全

时间: 2024-10-13 01:17:16

c++中const用法大全的相关文章

C++中const用法总结

1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的.对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变.例如:const int nValue:         //nValue是constint const nValue:    // nValue是const但是对于指针类型的TYPE,

【c++】C++中const用法总结

1.      const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误. 2.      const 修饰类的数据成员.                                                                const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的.因

C#中const用法详解

本文实例讲述了C#中const用法.分享给大家供大家参考.具体用法分析如下: const是一个c语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助.另外const在其他编程语言中也有出现,如c++.php5.c#.net.hc08 c const 一般修饰 的变量为只读变量 const定义应该为在定义的时候初始化 以后不能改变他的值 例: 代码如下: const

C++中const用法小结

const表示其所修饰的对象不可以被改变,例如常量,函数,指针等,下面总结一下常见的 几条const用法: 1 指针常量与常量指针:这两个概念很容易搞混淆,笔者每次用到这两个概念的时候都要重新查一下 文档才放心,查看定义与实例的时候,很容易理解二者的意义与区别,时间一长,概念又模糊了.这里 介绍一个简单的记法,这个方法<<Effective C++>>第三版中看到的:     常量指针,即指向常量的指针,故名思议,指针指向的对象是常量,可以改变指针本身的值,不可以 改变指针指向的对

C#中MessageBox用法大全(转)

我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息. 2.MessageBox.Show("There are something wrong!","ERROR"); 可以给消息框加上标题. 3.if (MessageBox.Show("Delete this user?&q

c/c++中const用法总结

1.修饰常量时: const int temp1;  //temp1为常量,不可变 int const temp2;  //temp2为常量,不可变 2.修饰指针时: 主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本身为常量: const int *ptr;   //*ptr为常量: int const *ptr;   //*ptr为常量: int* const ptr;   //ptr为常量: const int * const ptr;   //*ptr.ptr均为常量:

C#中MessageBox用法大全

我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息. 2.MessageBox.Show("There are something wrong!","ERROR"); 可以给消息框加上标题. 3.if (MessageBox.Show("Delete this user?&q

C# winform 中MessageBox用法大全(附效果图) (转载+说明)

声明:这篇文章是转载的转载的,由于原作者的博客被关闭 我就不再列出了,提前先说明下,if语句中的判断有些太长,建议提前声明一个变量, DialogResult MsgBoxResult;            MsgBoxResult = MessageBox.Show("确定更新数据?", "请确定", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Butt

C++中const用法(3)——引用形参问题

c++函数的引用参数用法大概是这样的: void swap(int &a,int &b) { int temp = a; a = b; b = temp; } 一个简单的交换两个int型数的函数,当调用该函数时,比如 int i = 3; int j = 4; swap(i,j); 则得到的结果是i=4,j=3.因为引用参数实际上是实参的别名,对引用参数操作也就是对实参进行操作,就像传递指针一样.而如果用普通的int型参数则得不到这样的效果. 如果用const修饰形参,比如const in