关于C++中的常量引用和常量成员函数

今天在利用NDKr13b将VS2013工程移植到Android平台过程中遇到了关于两个关于如题的小问题,在此做一记录。

1.问题描述:定义了一个结构体structA(在结构体中定义了构造函数,形如structA(int m){})和一个以此结构体作为入参的函数fun(structA & m_A),在VS工程中多次存在形如

fun(structA(0))的调用,在NDK编译时编译器报错:非常量引用无法绑定临时变量。

简化如下:int a = 1;

                         int &b = a;//OK

                         int &b = 1;//not OK

                          const int &b = 1;//OK

     解决方法:将fun的入参改为fun(const structA & m_A)。

2.问题描述:定义了一个结构体structB(在结构体中定义了一个成员函数funA())和一个以此结构体作为入参的函数funB(const structB & m_B),在funB中存在m_B.funA()的调用,在NDK编译时出错:m_B的this指针为const,而funA()是非const函数,不可用。

      基本原理:常量结构体无法调用非常量成员函数(不然就有可能通过非常量成员函数修改结构体,不符合const的机制)。

     解决方法:将funA()声明改为funA const (),即将其改为常量成员函数。

小结:这两个问题可以归结为const限定符问题,由于VS编译器并没有对其进行报警(原理还未深究),因此直到用clang(NDKr13e默认的编译器)编译时才报错。在以后使用中需加以警惕。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值