`
网络接口
  • 浏览: 44901 次
文章分类
社区版块
存档分类
最新评论

关于C++中const关键字的一些总结

 
阅读更多

下面主要对const关键字的一些性质进行说明:

1)关于变量的作用于问题

我们知道一般头文件包含类的定义,extern变量声明和和函数声明,但是const定义的变量也可以放在头文件中。这是一个例外,因为const定义的变量与不带const定义的变量存在着很大区别,例如:我们定义(假设val和cval都定义在函数外内部):

点击(此处)折叠或打开

int val = 0;

int const cval = 0;

虽然定义的形式相似,但是val和cval的作用域却存在很大的差别。因为val定义形式相当于extern int val =0;也就是说val是一个全局变量(在函数外部非const和static变量定义默认加上extern关键字)。如果将val的定义放在头文件中,那将导致多重定义的错误,因为每个包含此头文件的文件都相当于定义一个全局变量val。但是cval却不存在这样的问题,因为const定义的变量默认情况下是文件作用于而不是全局作用于,也就是上面中的cval的定义不会在默认情况下加上extern关键字,从而const关键字定义的变量不是一个全局变量。这样即便将cval的定义放到头文件中也不会发生多处定义的错误,最多只是包含此头文件的文件中都有一个变量cval且其值相同而已。

2)关于引用的赋值问题

    首先给出两段代码,如下:

点击(此处)折叠或打开

double dval = 3.14;                   double dval = 3.14;

const int& cval = dval;               int& val = dval;

虽然表达式相似,但是右边非const的val引用定义却实非法的,为了说明这个问提,我们必须从编译器是如何处理上面两个式子说起,编译器会将上面的式子展开成如下形式(不同内置类型转换时都会发生):

点击(此处)折叠或打开

double dval = 3.14;

int tmp = dval;

const int& cval = tmp;

如果上式中右边val的定义是正确的,那么将导致与引用的定义相矛盾。我们具体举例说明,假设val的 定义是正确的,那么我们改变val的数值,根据引用的定义,我们知道dval的数值也将发生改变,但是编译器会产生一个中间值,这将导致对val的改变并不会导致dval数值相应的变化而是导致tmp数值的变化,而dval保持不变,从而这就与引用的定义相矛盾。但是const定义的变量却不存在这个问题,因为cval不允许改变cval的值,从而不会出现上面在说val时存在的问题。从而编译器允许cval的定义,但不允许val的定义。最后再说一句,上面的定义同样存在与我们平时感觉上不相符的问题,我们知道引用值应该和被引用值相同,然而对于const变量,在编译期,其值就被确定,而一旦在const之后改变了上面的dval值,这同样将导致cval和dval数值不同。为了避免这种情况,在进行上面的引用定义时,应该保持引用者和被引用者都是const定义。

3)关于函数的重载

    我们知道C++中,函数重载是通过编译器重写函数名字来实现的(c++中重写函数也会将参数考虑进去,例如类型或大小),在实现的过程中也会将const作为类型进行考虑,重写函数名字。这个很好理解,比如void f(int)和void f(const int)。一个函数类型为(void)(*)(int),而另一个函数类型为(void)(*)(const int),这样自然定义的是两个不同类型的变量。这个常常用在配对函

数中,例如重载[]操作符时。

4)关于成员函数

    有如下简单代码:

点击(此处)折叠或打开

class A{

public:

    int get()const

    {

        //++val; //error

        return val;

    }

private:

    int val;

};

我们知道,在成员函数get()中,是不可以改变成员变量的值的。例如在get中进行++val将会报错。为什么会报错呢?首先我们知道,在普通成员函数内访问成员变量是通过this指针来实现的,而this指针的类型为A*const。如果我们如上定义get函数时,在get函数内部的this指针的类型就不再是A* const,而是const A* const的类型。从而如果我们再去修改成员变量的值,自然会报错。也就是说,在成员函数末尾加上const相当于将A*const类型的this转化为const A* const类型的指针。

分享到:
评论

相关推荐

    c++中const关键字使用详解

    总结,const关键字在C++编程中扮演着重要的角色,合理地使用const不仅可以提升代码的安全性和可读性,还可以提高代码的维护效率。在编程实践中,应充分理解和利用const的特性,编写出更加健壮的代码。

    C++中const关键字用法详解及实例和源码下载

    现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲解了一些知识,后来在网上面搜了关于const的关键字的讲解,但是搜到的内容和书上面讲解的内容有着非常让人疑惑的东西,看看下面的...

    C++const关键字详解

    ### C++中的`const`关键字详解 在C++编程语言中,`const`关键字是一个非常重要的概念,它用于声明常量、限定函数参数以及优化内存管理。本文将深入探讨`const`关键字的各种用法和其背后的原理,帮助读者更全面地...

    C++中const关键字详解

    ### C++中const关键字详解 #### 一、引言 在C++编程语言中,`const`关键字是一个非常重要的概念,它被广泛用于各种上下文中,以提高代码的安全性、可读性和效率。本文将详细介绍`const`关键字的用法及其在不同场景...

    const关键字使用总结

    ### C/C++中的`const`关键字详解 #### 一、`const`的作用 `const`关键字在C/C++中有着广泛的应用,它主要用于定义不可更改的变量或对象,以此提高程序的安全性和可维护性。 **1. 定义`const`常量** - **作用**...

    C++语言const 关键字使用方法图文详解

    在C++编程语言中,`const`关键字是一个非常重要的元素,用于限定变量、函数参数、成员函数等,确保它们在程序执行过程中不可修改。本文将详细介绍`const`关键字的使用方法,包括它如何应用于成员变量、成员函数、...

    const关键字详解

    const关键字是C++中一个非常重要的关键字,其主要用途是限定变量的读写权限,从而提高程序的健壮性。下面将通过对const关键字的详细解释来展示其灵活的用法。 1. 限定符声明变量只能被读 const关键字可以限定变量...

    浅析c++ 中const关键字

    浅析C++ 中const关键字 C++ 中的const关键字是一个限定符,它限定一个变量不允许被改变。使用const可以在一定程度上提高程序的安全性和可靠性。当我们在编写程序时,可能会遇到一些变量不需要被改变的情况,这时...

    C++编程中的const关键字常见用法总结

    在C++编程中,`const`关键字是一种非常重要的特性,用于定义常量、限制指针和引用的行为,以及约束函数的副作用。以下是`const`关键字的一些常见用法: 1. **定义常量**: `const`关键字可以用来声明常量,确保...

    C++中static关键字总结

    总结来说,C++中的static关键字提供了一种机制,可以控制变量和函数的作用域和生命周期,使其在需要的地方得到合理的存储和访问。正确地理解和使用static关键字,可以帮助编写出更加高效、安全和易于维护的代码。

    c++中关键字const的用法详解

    本文档详细介绍了C++中关键字const的用法,并给出了具体的示例来帮助读者理解

    浅谈C++中的几个关键字static,const,inline.doc

    "C++中的static、const、inline关键字详解" C++ 中的 static 关键字是一种非常重要的修饰符,它可以控制变量的存储方式和可见性。静态变量的两大作用是控制存储方式和控制可见性。控制存储方式是指将变量存储在程序...

    C中const和C++中const区别

    C中const和C++中const...在C语言中,const关键字只是表示该变量不能被赋值,而在C++中,const关键字确实可以防止通过程序的内部(或者说外部)的方法来修改这个值。我们需要根据不同的语言环境来正确使用const关键字。

    C++中的关键字解析

    ### C++中的关键字解析 #### 一、保留字与关键字 C++中存在大量预定义的标识符,这些...以上是关于C++关键字及其相关概念的详细解析,这些关键字和概念构成了C++编程语言的基础,理解它们对于学习和使用C++至关重要。

    C++中const用法总结

    ### C++中const用法总结 #### 一、引言 `const` 是 C++ 中一个非常重要的关键字,用于声明常量或指定某些实体不可被修改。熟练掌握 `const` 的使用方法对于编写高质量的 C++ 代码至关重要。本文将详细介绍 `const`...

    C++ const关键字的实例用法

    "C++ const关键字的实例用法" 以下是关于C++ const关键字的实例用法...10. 总结:const关键字是一个非常重要的概念,在C++中有广泛的应用场景,了解const关键字的实例用法可以帮助开发者更好地编写高效、可靠的程序。

    详解C++中的const关键字及与C语言中const的区别

    当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间–这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0;相当于#define c 0;    当在当前文件之外...

Global site tag (gtag.js) - Google Analytics