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

来源:互联网 发布:linux sed 编辑:程序博客网 时间:2024/05/16 01:05

今天在利用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默认的编译器)编译时才报错。在以后使用中需加以警惕。

原创粉丝点击