`
zch198627
  • 浏览: 39907 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

c++的常量

    博客分类:
  • C++
阅读更多

1.不能将const修饰的任何对象、引用和指针作为赋值表达式的左值。
        const int cx=100;
        const int & rcx=cx;
        const int * pcx=&cx;
        cx=200;                 //error
        rcx=200;                //error
        *pcx=200;               //error

    2.const类型的对象不能直接被non-const类型的别名所引用。
    (1)不能将const类型的对象传递给non-const类型的引用。
        const int cx=100;
        int & rx=cx;            //error
    (2)不能将const类型的实参传递给形参为non-const类型引用的函数。
        void f(int a)
        {
        }
        void g(int & ra)
        {
        }
        const int cx=100;
        f(cx);                  //ok
        g(cx);                  //error
    (3)不能将const类型的对象作为non-const类型引用的函数返回值。
        int & f(const int & rca)
        {
              return rca;       //error
        }
        int x=100;
        f(x);

    3.可以使用const类型别名引用non-const对象。此时通过const引用不能修改对象,但对象可以通过non-const引用被修改。
        int x=100;
        int & rx=x;
        const int & rcx=x;      //ok
        x=200;
        rx=200;
        rcx=200;                //error

    4.指针的属性有两个:指针的类型和指针本身的常量性。

     <1>const int *r=&x; //声明r为一个指向常量的x的指针,r指向的对象不能被修改,但他可以指向任何地址的常量

     <2.> int const *r=&x; //与用法<1>完全等价,没有任何区别

     <3.> int * const r=&x; //声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地址的内容可以修改

      <4.> const int * const r=&x; //综合<1>、<3>用法,r是一个指向常量的常量型指针

    5.可以将相同类型(包括常量性)的const指针值赋给non-const指针。
        int x=100;
        int * px;
        const int * pcx=&x;
        px=pcx;                 //error
        int * const cpx=&x;
        px=cpx;                 //ok

    6.若函数的返回值为内建类型或是指针,则该返回值自动成为const性质。但自定义类型则为non-const性质。
        int f()                 //相当于返回const int
        {
              return 100;
        }
        int * g(int & ra)       //相当于返回int * const
        {
              return &ra;
        }
        class CTest
        {
              int n;
        public:
              CTest(int n){this->n=n;}
        };
        CTest h()               //返回的就是CTest
        {
              return CTest(200);
        }

        f()=200;                //error

        int x=100;
        int y=200;
        int * px=&x;
        g(y)=px;                //error
        *g(y)=x;                //ok,从这点可以看出g()返回的不是const int *

        CTest t(100);
        h()=t;                  //ok,但却是完全错误的、危险的做法
                                //所以h()的正确写法是返回const CTest

分享到:
评论

相关推荐

    c++常量字符串编译期加密

    源实现参考网络资源;基于源实现解决了其重入问题。 语言环境:c++14 测试环境:在VS2019、ubuntu(wsl) g++(理论上支持c++14的都可以)

    C++常量与变量的区别以及变量的使用.md

    ### C++常量与变量的区别以及变量的使用 #### 一、引言 在学习编程语言的过程中,理解和掌握常量与变量的概念是非常重要的。本文档将深入探讨C++中的常量与变量的区别,并通过实际代码示例来展示如何正确地使用...

    c++常量与变量基本知识

    "C++常量与变量基本知识" C++是一种面向对象的编程语言,它的核心基础是变量和常量。本篇文章将对C++中的变量和常量进行浅析介绍。 变量是存储数据的值的空间,由于数值的类型有多种,有整数、小数(浮点数)、...

    0706-极智开发-解读C++常量指针和指针常量

    0706_极智开发_解读C++常量指针和指针常量

    C++常量详解二(常量形参,常量返回值,常量成员函数)

    C++常量详解二(常量形参、常量返回值、常量成员函数) C++ 中的常量是指在编译期确定的值,它们不能被改变。在本篇文章中,我们将深入探讨 C++ 常量的三个方面:常量形参、常量返回值和常量成员函数。 1.常量形参...

    c++常量详解

    c++常量详解 常量是存放固定且不可变值的,一旦确定初始值则在程序其它地方不可改变,所 以const对象必须初始化。常量一般使用const关键字来修饰。在C++中,常量可以大致分为三类: 1. 对象常量:const int a = 10...

    C++学习日记4 C++常量和算术表达式

    上一节我们介绍了变量,它是一种存储在电脑内存里,在程序中可以改变的数据。然而,有时候我们还会遇到一些数据,它们在程序中不应该被改变。比如圆周率π就应该等于3.14151926……,一年就应该是12个月,在程序中不...

    c++常量引用.zip

    在C++编程语言中,常量引用是一种特殊类型的引用,它在声明时被绑定到一个不可修改的对象。常量引用的引入主要是为了提高程序的安全性和效率。本文将深入探讨C++中的常量引用,包括其定义、作用、使用场景以及与普通...

    c++常量引用-基础学习

    在C++中,常量引用是一个非常重要的概念,它在编程中扮演着关键角色。本文将深入探讨C++中的常量引用,帮助初学者理解其基本原理和用法。 首先,我们需要了解什么是引用。引用在C++中是一种别名机制,它就像是变量...

    C++ 常量成员常量返回值详解

    C++ 中的常量成员常量返回值详解,需要在构造函数列表中给出,常量数据成员不能赋值,常量成员函数不能修改类数据成员,返回常量的函数可以是常量指针、指针常量、常量,普通类型的返回常量的函数目的是防止产生丑陋...

    5 C++常量收尾片

    我们已经在前面学习了变量,并且能够熟练的使用它。可是,仅仅靠这些知识,有些问题仍然无法得到解决。

    C_C++指针常量和常量指针详解

    ### C_C++中的指针常量与常量指针详解 #### 一、定义与基本概念 在C/C++编程语言中,指针是一个非常重要的概念,它允许程序员直接访问和操作内存地址。而在指针的基础上,衍生出了两种特殊的指针类型——**指针...

    C++常量详解一(常量指针与常量引用的初始化)

    在C++编程语言中,常量是一个非常重要的概念,它用于定义不可更改的值。本文将深入探讨常量指针和常量引用的初始化,帮助理解这两种特殊的常量形式。 首先,我们需要明白常量(const)的基本用法。常量在声明时必须...

    vs code C/C++语法高亮配置文件(C/C++ Themes插件)

    vscode配色插件的c/c++语法高亮配置文件,主题插件为C/C++ Themes。 可以对诸如const、enum、typedef别名、结构体引用等语法高亮进行设置,语言本身的关键字自然不用说了,比one dark pro等热门的插件颜色丰富的多。...

    简单总结C++中指针常量与常量指针的区别

    总结来说,理解并熟练掌握C++中的指针常量和常量指针对于编写高效、可靠的代码至关重要。它们允许我们在编程时对指针的行为进行精确控制,防止不必要的数据修改,提升代码的安全性。通过合理使用指针常量和常量指针...

    常见C++笔试题目整理含答案.docx

    5. C++常量指针 在C++中,const符号可以用来修饰指针和指针所指向的变量。如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即...

Global site tag (gtag.js) - Google Analytics