C++中const的特性的使用

目录(作用):

  1:修饰变量,说明该变量不可以被改变;
  2:修饰指针,分为只想常量的指针和自身是常量的指针
  3:修饰引用,指向常量的引用,用于修饰形参,即避免了拷贝,有避免了函数对值的修改; 
  4:修改成员函数:说明该成员函数内不能修改成员变量。
  5:指针与引用

正文:

以下是对各种情况的示例:

//注:1:const修饰的引用cj的值且引用的对象无法修改无法修改,但是引用的i是可修改的
#include <iostream>

using namespace std;

int main() {
  int i = 1;
  const int &cj = i;

  cout << "cj : " <<cj<< endl;(√)

  i=2;
  cout << "cj : " <<cj<< endl;(√)

  cj=3;
  cout << "cj : " <<cj<< endl;(×)

  int a=9;
  cj=a; (×)

  return 0;
}

错误提示:
/code/main.cpp: In function ‘int main()':
/code/main.cpp:15:4: error: assignment of read-only reference ‘cj'
cj=3;
^
/code/main.cpp:19:4: error: assignment of read-only reference ‘cj'
cj=a;
^
sandbox> exited with status 0
//注:常量引用,本身也要是常量才行:

#include <iostream>

using namespace std;

int main() {
  const int i = 4;

  const int &ck = i; //正确,常量对象绑定到 const引用
   cout<< "ck="<<ck<<endl;

  const int b = 5;

  int &r = b;  //错误,

  return 0;
}

/code/main.cpp: In function ‘int main()':
/code/main.cpp:13:14: error: invalid initialization of reference of type ‘int&' from expression of type ‘const int'
  int &r = b;  //错误,
       ^
sandbox> exited with status 0
//注:const 的隐式转换:

#include <iostream>

using namespace std;

int main() {
  double b = 2.14;
  const int &a = b;
  // 会进行如下转换:
//   int temp = b;
//   const int &a=temp;
  // 所以,给b进行赋值,a可能
  cout<<"a="<<a<<endl;
  return 0;
}

运行结果:
a=2
sandbox> exited with status 0
//注:修饰成员函数_1:

class Date
{
  private:
  int m_year;
  int m_month;
  int m_day;
  public:
  int GetDay(void) const
  {
    m_day=7;
    return m_day;//修饰的情况下,不能对成员变量进行修改;
  }
};

// void GetDay(void) const
// {
//   return m_day;

// }

int main() {
  double b = 2.14;
  const int &a = b;
  // 会进行如下转换:
  //   int temp = b;
  //   const int &a=temp;
  // 所以,给b进行赋值,a可能
  cout<<"a="<<a<<endl;
  return 0;
}

错误提示:
/code/main.cpp: In member function ‘int Date::GetDay() const':
/code/main.cpp:16:8: error: assignment of member ‘Date::m_day' in read-only object
 m_day=7;
    ^
sandbox> exited with status 0
//注:修饰函数_2

#include <iostream>

  using namespace std;

class Date
{
  private:
  int m_year;
  int m_month;
   mutable int m_day;//通过被mutable修改的成员变量,就可以被修改了
  public:
  int GetDay(void) const
  {
    m_day=7;
    return m_day;
  }
};

// void GetDay(void) const
// {
//   return m_day;

// }

int main() {
  double b = 2.14;
  const int &a = b;
  // 会进行如下转换:
  //   int temp = b;
  //   const int &a=temp;
  // 所以,给b进行赋值,a可能
  cout<<"a="<<a<<endl;
  return 0;
}

运行结果:
a=2
sandbox> exited with status 0
//注:const修饰的指针

#include <iostream>

  using namespace std;

int main() {
  const int* p = NULL;//这两种修饰的是*p指向的值
  //int const* p = NULL;

  int a=9;
  p=&a;//修改了p指向的地址,任然没有出错
  cout<<"*p="<<*p<<endl<<"p="<<p<<endl;

  int c=10;
  int* const b = &c;//这两种修饰的是p指向的地址
   c=45;
  *b=c;//修改了b指向的值,任然不会出错
  cout<<"*b="<<*b<<endl<<"b="<<b<<endl;

  b=&a;//这里有问题了,b指向的地址是不能修改的
  cout<<"*b="<<*b<<endl<<"b="<<b<<endl;
  return 0;
}

运行结果:
/code/main.cpp: In function ‘int main()':
/code/main.cpp:21:3: error: assignment of read-only variable ‘b'
 b=&a;
  ^
sandbox> exited with status 0
//注:const修饰的引用

#include <iostream>

  using namespace std;

int main() {
  int x = 3;
  const int& y = x;
  cout<<"y="<<y<<endl;
  x=9;
  cout<<"y="<<y<<endl;

  y=9;//const修饰的引用是不能够在更改引用指向的对象的
  cout<<"y="<<y<<endl;
  return 0;
}

运行结果:
/code/main.cpp: In function ‘int main()':
/code/main.cpp:13:3: error: assignment of read-only reference ‘y'
 y=9;
  ^
sandbox> exited with status 0

到此这篇关于C++中const的特性的使用的文章就介绍到这了,更多相关C++ const的特性内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ 中const修饰虚函数实例详解

    C++ 中const修饰虚函数实例详解 [1]程序1 #include <iostream> using namespace std; class Base { public: virtual void print() const = 0; }; class Test : public Base { public: void print(); }; void Test::print() { cout << "Test::print()" << end

  • c++ 类中const成员变量的赋值方法

    在头文件的类的定义中定义了一个const成员变量c++ 规则: 1.类定义中不能进行初始化,因为头文件中类的定义只是一个声明,并没有分配真正空间,因此变量是不存在的,因此是不能赋值的. 2.const 定义的变量是不能赋值 这可如何是好,声明中不能赋值,声明完还不能赋值.又不能不赋值. 解决方案: 1.在构造函数后的参数初始化列表中初始化 2.将const变量同时声明为 static 类型进行初始化. Eg: #include <iostream> class CTestA { public:

  • 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++ const修饰变量和修饰函数介绍

    const修饰变量 关于const最常见的一个面试题是这样的:char *const和const char*有什么区别,大家都知道const修饰符代表的是常量,即const修饰的变量一旦被初始化是不能被更改的,这两个类型一个代表的是指针不可变,一个代表指针指向内容不可变,但具体哪个对应哪个,很多人一直搞不清楚. 有这样一个规律,const修饰的是它前面所有的数据类型,如果const在最前面,那么把它和它后面第一个数据类行交换.比如上面的const char*交换之后就是char const *,

  • C++中const的实现机制深入分析

    问题 C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制. 问题分析 简单的说const在C语言中表示只读的变量,而在C++语言中表示常量.关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一贴说明. 那么const究竟是如何实现的呢? 对于声明为const的内置类型,例如int,short,long等等,编译器会如何实现const的本意?那么对于非内置类型是否也是与内置数据类

  • c++中const的使用详解

    Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的. 1.定义常量(1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value;      const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声

  • 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均为常量: 3.const修饰

  • C++中的const和constexpr详解

    C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error. 对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变).C++中采用的是物理常量性,例如下面的例子: struct A { int *ptr; }; int k = 5, r = 6; const A a = {&k};

  • C++中const的特性的使用

    目录(作用): 1:修饰变量,说明该变量不可以被改变: 2:修饰指针,分为只想常量的指针和自身是常量的指针 3:修饰引用,指向常量的引用,用于修饰形参,即避免了拷贝,有避免了函数对值的修改: 4:修改成员函数:说明该成员函数内不能修改成员变量. 5:指针与引用 正文: 以下是对各种情况的示例: //注:1:const修饰的引用cj的值且引用的对象无法修改无法修改,但是引用的i是可修改的 #include <iostream> using namespace std; int main() {

  • 详解C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 const int a = 10; int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以通过.而

  • Vue高版本中一些新特性的使用详解

    一.深度作用选择器( >>> ) 严格来说,这个应该是vue-loader的功能."vue-loader": "^12.2.0" 在项目开发中,如果业务比较复杂,特别像中台或B端功能页面都不可避免的会用到第三方组件库,产品有时会想对这些组件进行一些UI方面的定制.如果这些组件采用的是有作用域的CSS,父组件想要定制第三方组件的样式就比较麻烦了. 深度作用选择器( >>> 操作符)可以助你一臂之力. <template>

  • 详解C/C++中const限定符总结

    const限定符 const是一种限定符,被const所限定的变量其值不可以被改变. const的初始化 由于const一旦创建其值就不能够被改变,所以我们必须对其进行初始化 const int a;//错误,const变量必须进行初始化! const int b=10;//正确,编译时初始化 const int c=get_size();//正确,运行时初始化 相同类型的变量相互初始化时,不论变量是否被const限定我们都可以进行随意的相互拷贝.因为在拷贝过程中我们只会用到等式右边变量的右值属

  • C语言与C++中const的用法对比

    目录 一.C语言中的const 二.C++中的const 三.进一步比较C和C++中的const 四.const与宏的区别 五.小结 一.C语言中的const const修饰的变量是只读的,本质还是变量 const 修饰的局部变量在栈上分配空间 const修饰的全局变量在只读存储区分配空间 const只在编译期有用,在运行期无用 C语言中的const使得变量具有只读属性 const将具有全局生命周期的变量存储于只读存储区 const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号

  • C++ 中const对象与const成员函数的实例详解

    C++ 中const对象与const成员函数的实例详解 const对象只能调用const成员函数: #include<iostream> using namespace std; class A { public: void fun()const { cout<<"const 成员函数!"<<endl; } void fun() { cout<<"非const成员函数 !"<<endl; } }; int

  • C++中const用于函数重载的示例代码

    常成员函数和非常成员函数之间的重载 首先先回忆一下常成员函数 声明:<类型标志符>函数名(参数表)const: 说明: (1)const是函数类型的一部分,在实现部分也要带该关键字. (2)const关键字可以用于对重载函数的区分. (3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数. (4)非常量对象也可以调用常成员函数,但是如果有重载的非常成员函数则会调用非常成员函数. 重载看例子: #include<iostream> u

  • C#中const 和 readonly 修饰符的用法详解

    1. 只有C#内置类型(int,double,long等)可以声明为const;结果.类和数组不能声明为const. 2. readonly 是在字段上使用的修饰符,直接以类名.字段访问. 3. const 必须在申明中初始化.之后不能再修改. 4. readonly可以在申明中初始化,也可以在构造函数中初始化,其它情况不能修改. namespace const_and_readonly { class Program { static void Main(string[] args) { Co

  • C#中const用法详解

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

随机推荐