C 箴言:只要可能就用const.pdfVIP

  • 1
  • 0
  • 约1.25万字
  • 约 10页
  • 2018-03-26 发布于河南
  • 举报
C 箴言:只要可能就用const

C++箴言:只要可能就用const 关于const 的一件美妙的事情是它允许你指定一种语义上的约束:一个特定的对象不应该被 修改。而编译器将执行这一约束。它允许你通知编译器和其他程序员,某个值应该保持不变。 如果确实如此,你就应该明确地表示出来,因为这样一来,你就可以谋取编译器的帮助,确 定这个值不会被改变。 关键字const 非常多才多艺。在类的外部,你可以将它用于全局常量或命名空间常量, 就像那些在文件、函数或模块范围内被声明为 static 的对象。在类的内部,你可以将它用 于 static 和 non-static 数据成员上。对于指针,你可以指定这个指针本身是 const,或 者它所指向的数据是 const,或者两者都是,或者都不是。 chargreeting[] = Hello; char*p= greeting;// non-const pointer, // non-constdata constchar*p = greeting; // non-const pointer, // constdata char* constp = greeting; // constpointer, // non-constdata constchar* constp= greeting;// constpointer, // constdata 这样的语法本身其实并不像表面上那样反复无常。如果 const 出现在 * 左边,则指针 指向的内容为常量;如果 const 出现在 * 右边,则指针自身为常量;如果 const 出现在 * 两边,则两者都为常量。 当指针指向的内容为常量时,一些人将 const 放在类型之前,另一些人将 const 放在 类型之后 * 之前。两者在意义上并没有区别,所以,如下两个函数具有相同的参数类型: voidf1(constWidget*pw);// f1takesapointertoa // constant Widget object void f2(Widgetconst *pw); // sodoesf2 因为它们都存在于实际的代码中,你应该习惯于这两种形式。 STLiterators 以指针为原型,所以一个 iterator 在行为上非常类似于一个 T* 指针。声 明一个 iterator 为 const 就类似于声明一个指针为 const(也就是说声明一个 T*const 指 针):不能将 iterator 指向另外一件不同的东西,但是它所指向的东西本身可以变化。如果 你要一个 iterator 指向一个不能变化的东西(也就是 constT* 的 STL 对等物),你应该用 const_iterator: std::vectorint vec; ... conststd::vectorint::iteratoriter= // iteractslike aT* const vec.begin(); *iter= 10;// OK, changeswhat iterpointsto ++iter; // error! iteris const std::vectorint::const_iteratorcIter= //cIteractslike a const T* vec.begin(); *cIter= 10;// error! *cIteris const ++cIter; // fine,changescIter 对 const 最强有力的用法来自于它在函数声明中的应用。在一个函数声明中,const 既 可以用在函数返回值上,也可以用在个别的参数上,对于成员函数,还可以用于整个函数。 一个函数返回一个常量,常常可以在不放

文档评论(0)

1亿VIP精品文档

相关文档