关闭

const常量使用概述

277人阅读 评论(0) 收藏 举报
分类:
《1》 const 成员函数
1 在函数后面加const
double aaa(double bb) const
{return bb}

任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。

表明此函数不能影响对象的状态,说白一点就是
不会改变对象中成员变量的数值。

总结就是如下3点:
1。const 只能声名 member function
2。const member function 不能修改对象的任意成员
但是可以修改类的静态成员。
3。const member function 不能调用非 const member function
可以调用静态成员函数
//const成员函数能够访问对象的const成员,
class Demo {
public:
                Demo(){
                                sY = 0;
                }
                ~Demo(){}
public:
                 void fun() const {
                
                 //             sY = sY + 1; //不可以
                              // 访问对象的成员函数是可以的,
                                sT = sT + 1; //可以
                                cout << sT << endl;
                                 //fun2(); //不可以

                                        fun4();
                }

                 void fun2()
                {
                                cout << "china" << endl;
                }

                 void fun3() const
                {
                                cout << "Love" << endl;
                }
                 static int sT;

               static void fun4()
                {
                                cout << "I Hate" << endl;
                }
                 int sY;
                 const int sX;
};


《2》 const 成员变量


(1)当const修饰成员变量的时候,表示成员常量,不能被修改,
只能在初始化中赋值。

(2) 只能在构造函数中按如下方式给变量赋值
     Demo( int x):sX( x) {
                                
                                sY = 0;
                }
(3) 成员变量可以在任何函数中使用,但是不能修改
               



2 const 定义常量
int const p=value;
coant int p=value; 
上面两者表达的功能是一样的


3 常量指针, 指针常量
(1) 常量指针 :
      把常量当const,指针当做* 。  就变成  const *p;
      所以表示指针指向的内容不可变,就是*p不能变,
       有两种表示方式:
      const   int   *p;
      int     const *p;
  (2)指针常量
      把常量当const ,指针当*
      * const p;
     所以表示指针p的值不可以变
     int * const p;   
// const (int *)  p;
    (3)指针常量和常量指针 
               const  int* const p;
               这个就表示指针p所指的内容和p都不可以改变

4 函数中使用const
 (1)const修饰函数参数

   a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:

void function(const Class& Var); //引用参数在函数内不可以改变

void function(const TYPE& Var); //引用参数在函数内为常量不可变

这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙.

    (2)const 修饰函数返回值

    const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。
    a.const int fun1() //
这个其实无意义,因为参数返回本身就是赋值。
    b. 
const int * fun2() //调用时 const int *pValue = fun2(); 
                          //
我们可以把fun2()看作成一个变量,即指针内容不可变。
    c.
int* const fun3()   //调用时 int * const pValue = fun3(); 
                          //
我们可以把fun3()看作成一个变量,即指针本身不可变。

//下面是对上面的一个比较完美的解释 
如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。例如函数
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为constconst A test = A 实例)或某个对象的引用为constconst A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。  
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

const 总结——定义常量、函数的使用

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用...
  • wangzhiyang925
  • wangzhiyang925
  • 2013-11-21 11:26
  • 1844

const(常量)与define(宏)的正确使用

一.首先介绍下const与宏的区别,这也是面试中经常问到的问题: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。编译时刻:宏是预编译(编译...
  • ideaspress
  • ideaspress
  • 2016-06-07 16:58
  • 1343

const char*、char*及字符串常量的正确使用

const char*和char*的转换是老生常谈了,但是很少有人把它们和字符串常量一起分析,本人觉得这是搞清楚他们的一个关键。 下面是一个简单的测试程序: 编译环境:windows、vs2010 #...
  • cuishumao
  • cuishumao
  • 2013-08-23 19:00
  • 2636

正确使用iOS常量(const)、enum以及宏(#define)

本文投稿文章,作者:SuperMario_Nil(简书) 前言:本文主要梳理iOS中如何使用常量、enum、宏,以及各自的使用场景。 重要的事情首先说:在iOS开发中请尽量多使用const...
  • wqt925497045
  • wqt925497045
  • 2016-05-30 13:49
  • 135

iOS 宏(define)与常量(const)的正确使用

在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSC...
  • sunnyboy9
  • sunnyboy9
  • 2016-02-25 17:27
  • 785

iOS 宏(define)与常量(const)的正确使用

在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @...
  • u013756604
  • u013756604
  • 2017-11-30 11:32
  • 26

正确使用iOS常量(const)、enum以及宏(#define)

 前言:本文主要梳理iOS中如何使用常量、enum、宏,以及各自的使用场景。 重要的事情首先说:在iOS开发中请尽量多使用const、enum来代替宏定义(#define);随着项目工程的逐渐...
  • args_
  • args_
  • 2016-05-30 11:21
  • 274

正确使用iOS常量(const)、enum以及宏(#define)(收藏)

重要的事情首先说:在iOS开发中请尽量多使用const、enum来代替宏定义(#define);随着项目工程的逐渐增大,过多的宏定义还可能影响项目的编译速度。 宏定义大家应该都不陌生,使...
  • qq_16844001
  • qq_16844001
  • 2016-05-30 14:33
  • 488

规则二 对常量使用ReadOnly而不是const

1. C# 有两种类型的常量,编译类型常量和运行时常量。 编译常量比运行常量会稍快,但是没有运行常量灵活。在性能要求非常严格但是数值不会改变的情况下使用编译常量。 编译常量 public con...
  • hongluk
  • hongluk
  • 2012-06-15 16:57
  • 204

Effective C++解析 Item3:尽量使用const (补充)物理的与逻辑的常量性

上接: Effective C++解析 Item3:尽量使用const (续)const 修饰成员函数const修饰成员函数的具体含义: 有两种认同观点: 1. 物理常量性:当且仅当函数不修改任...
  • DoronLee
  • DoronLee
  • 2017-12-05 22:00
  • 46
    个人资料
    • 访问:14815次
    • 积分:526
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条