第六章类成员二(编辑修改稿)内容摘要:

// Works fine int k = f4()。 // But this works fine too! } ///:~ 对内部类型来说,按值返回 const量并没有什么特别的意义。 《面向对象程序设计》 中国科学技术大学计算机系 马建辉 15 const的应用 :const返回值 (续 ) 3. 按值返回自定义类型的 const: 实际上阻止了返回值作为左值出现。 class X { int i。 public: X(int ii = 0)。 void modify()。 }。 X::X(int ii) { i = ii。 } void X::modify() { i++。 } 《面向对象程序设计》 中国科学技术大学计算机系 马建辉 16 X f5() { X x(2) return x。 // 返回变量 } const X f6() { return X()。 // 按值返回 const。 } void f7(Xamp。 x) { // 按值传递非 const引用 ()。 } int main() { f5() = X(1)。 // 正确, f5()返回非 const量; f5().modify()。 // 正确 f7(f5())。 //可能会有 Warning,跟编译选项有关 f6() = X(1)。 // Error: f6()是常量,不能作左值 f6().modify()。 // Error: f6()是常量,不能被修改 f7(f6())。 // Error: Why?? } ///:~ error 2664: cannot convert parameter 1 from 39。 const class X39。 to 39。 class X amp。 39。 《面向对象程序设计》 中国科学技术大学计算机系 马建辉 17 const的应用: const指针 4. 传递和返回 const指针 char * strcpy(char * dest, const char * src); void t(int*) { } void u(const int* cip) { *cip = 2。 // Error: 试图改变值 int i = *cip。 // OK copies value int* ip2 = cip。 // Error: 试图让非 const * 指向 const * } const int* const w() { static int i。 return amp。 i。 // 返回静态局部量的地址 } 《面向对象程序设计》 中国科学技术大学计算机系 马建辉 18 int main() { int x = 0。 int* ip = amp。 x。 const int* cip = amp。 x。 t(ip)。 // OK //! t(cip)。 // Not OK u(ip)。 // OK u(cip)。 // Also OK //! int* ip2 = w()。 // Not OK const int* const ccip = w()。 // OK const int* cip2 = w()。 // OK //! *w() = 1。 // Not OK。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。