您的位置:首页 > 其它

const用法详解

2010-10-18 18:16 344 查看
  今天上网上看看,发现很多校园招聘。想起了去年的这时候和兄弟们刚从河南少林回来。然后就是几次笔试。由于那时还自视清高就投了几个公司,里面几家公司好像都考const的用法了。真是无语啊,那时考的,现在才大概明白了。人懒了没办法啊,废话不多说开始我们的const之旅。首先const来自英语单词constant,就是不变的意思。说来简单,用起来就各种纠结了。

  先从正常的定义常量说起吧,在c++里const相当于c里的#define定义。所以在申明的时候要初始化,不然会报错。const纠结就纠结在它放在不同的位置。现举例说明。

  int year = 2010;

  const int *mouth = &year;

  int const *hour = &year;

  int * const minite = &year;

  const int* const  second =&year;

它们之间有什么区别,是不是看晕了,呵呵。很正常,我当时也晕了,想想这出题的人真讨厌。其实发现窍门是很容易理解的。把前面的类型去掉,好了,现在一目了然了吧。第一个是说*mouth这个变量不能改变,而指针mouth可以改变的。第一个其实和第一个一样,不仔细看容易和第三个混淆,第三个也很简单,解引用值可以变,但是指针不可变。刚开始我理解成指针指向year了。然后变不变都考虑year这个变量。这样导致mouth和year特别混乱。其实只要 看前面的变量,就一切很明白了。

  说完常用的变量然后来看类里面成员函数的应用。我直接举例子了,然后解释说明了。

#include <iostream>
using namespace std;
class date
{
public:
date(): year(0),mouth(0),day(0)
{
}
date(int year, int mouth, int day) : year(year),mouth(mouth),day(day)
{
}
~date()
{
}
const int* GetYear();
int* const  GetMouth();
int GetDay() const;
private:
int year;
int mouth;
int day;
};
const int* date::GetYear()
{
return &year;
}
int* const date::GetMouth()
{
return &mouth;
}
int date::GetDay() const
{
//return day++;						// error const决定不能改成员变量
const_cast<date*>(this)->day++;		// right
return day;
}
int main()
{
int today = 13;
date day(2010, 10, 20);
int *mouth = day.GetMouth();
const int *year = day.GetYear();
int tommrow = day.GetDay();
cout<<*year<<"-"<<*mouth<<"-"<<tommrow<<endl;
getchar();
}
 

  其实对上面定义常量明白理解了,函数里就多了一个成员函数const的用法,这里强调一点的是,申明和定义都要把const带上。他们是一个整体。要是想改变const的话就用const_cast强转。就是平常传递参数的话,如果在函数里不想改变值的话,尽量加上const关键字,提高代码的健壮性,防止不知什么时候值被改变了,尤其是在传递引用的时候。

   就写到这里,c++的细节东西好多啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  date 2010 招聘 c