enum和#define、const
发布于 2006-01-22 17:02 1 阅读:14,132 评论:1 标签:

  在enum中定义的量和#define、const定义的量都是常量。定义后都不能用"++"的形式自增和自减。

  一:在定义下面后,Monday就是常量“1”:

      enum Days
         {
           Sunday,Monday,tuesday,Wedneday,Tursday,Friday,Saturday
         };

  如果执行程序:

    cout<<"\n ++Monday is : "<< ++Monday;

  则编译器会提示:

     no match for 'operator++' in '++Monday'

  在定义下面: 

    #define BDefine 10

  如果程序执行下面语句:

    cout<<"\n ++BDefine is : "<< ++BDefine;

  编译器会提示:

    non-lvalue in increment

  定义如下const后:

    const int CConst = 20;

  如果程序执行下面语句:

    cout<<"\n ++CConst is : "<< ++CConst;

  编译器会提示:

    increment of read-only variable `CConst'

附测试程序:(源于书中34页清单3.7)

/*********************************************
*Developer:                 yayu;            *
*My email:                  xieyayu@163.com  *
*Development environment:   Dev-C++ 4.9.9.0; *
*********************************************/

#include
#include
#define BDefine 10
const int CConst = 20;

using namespace std;

int main(int argc, char *argv[])
{
 
  enum Days
       {
         Sunday,Monday,tuesday,Wedneday,Tursday,Friday,Saturday
       };
      
  Days today;
  today = Monday;
 
  int AEnum;
  AEnum = Monday;
   
  if(today == Sunday || today == Saturday)
  {
    cout<<"\n today is : "<< today;
    cout<<"\n Yayu love the weekends! \n";
  } 
  else
  {
    cout<<"\n today is : "<< today;
    cout<<"\n Back to work!. \n";
  }
 
  cout<<"\n AEnum is : "<< AEnum;
  cout<<"\n Monday is : "<< Monday;
 
  cout<<"\n ++AEnum is : "<< ++AEnum;
  //cout<<"\n ++Monday is : "<< ++Monday;
  //cout<<"\n ++BDefine is : "<< ++BDefine;
  //cout<<"\n ++CConst is : "<< ++CConst;
 
  return 0;
}

补充一点

enum自增给出的错误提示是你并未重载operator++操作符。这条错误信息貌似在说如果重载了operator++,还是可以使用的。不过我没这么做过。
#define只是一条编译预处理指令,它所作的功能就是简单的文本替换。也就是说,它其实并没有为变量分配内存。
const才是真正的常量。

by 李马 2006-01-23 09:21:00
Warning: Trying to access array offset on value of type bool in /opt/bitnami/apache/htdocs/workingsmarty/templates_c/e21e83752348f01f75c472238af0e4512d51cc32_0.file.left_look.html.php on line 154

Warning: Trying to access array offset on value of type bool in /opt/bitnami/apache/htdocs/workingsmarty/templates_c/e21e83752348f01f75c472238af0e4512d51cc32_0.file.left_look.html.php on line 172