《C++ primer》学习笔记之十一:const的放置位置

来源:互联网 发布:速食汤 知乎 编辑:程序博客网 时间:2024/05/16 08:55
  const double d = 9.1;
  double const d2 = 9.2;   //const放double后或double前效果一样
  double d3 const = 9.3;   //error.不能放在变量名后。const修饰函数名时可以放在函数名后。
  
  const double *dp = &d;   //dp为一个指针,指向一个const double。 赋值(*dp)=9.2;将导致错误
  double const * dp2 = &d;  //const放double后或double前效果一样
  const double * const dp3 = &d;  //dp为一个const指针,指向一个const double。
  const double const * const dp4 = &d; //导致warning(重复的修饰),这句话等同于:const const double * const dp4 = &d;
 
 const double d = 9.1;这句比double const d2 = 9.2;常见。不过后者我认为更确切,看下面:
  typedef char *cstring;
  char *cstr = "ab";
  const cstring cstr = "cd"; //这一句相当于下面的哪一句?
  const char *cstr2;
  char *const cstr3;   //与这句效果相同
 语句const cstring cstr = "cd"; 与char *const cstr3;等效,而不是与const char *cstr2;等效。
 原因:const cstring cstr = "cd"; 与cstring const cstr3;等效。
 所以将const置于修饰的类型的后面比放在类型的前面好,比如:
  double const d2 = 9.2; //not: const double d = 9.1;
  double const *dp = &d; //not: const double *d =&d;
  double const * const dp31 = &d;  //not: const double * const dp3 = &d;
 将double叫double变量,叫double const叫double不变量。这就不绕口了。
原创粉丝点击