gpt4 book ai didi

C++中const的特性的使用

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C++中const的特性的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

目录(作用):

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

正文:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//注: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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//注:常量引用,本身也要是常量才行:
 
#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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//注: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//注:修饰成员函数_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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//注:修饰函数_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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//注: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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//注: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的特性内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/Jlord/p/12838387.html 。

最后此篇关于C++中const的特性的使用的文章就讲到这里了,如果你想了解更多关于C++中const的特性的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com