c++ operator 的CONST应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ operator 的CONST应用相关的知识,希望对你有一定的参考价值。

operator 用CONST锁定以后, NUM B=++i就会报错,但是 上面的 ++i就没有报错,这是为什么?
#include <iostream>
using namespace std;
class num

public:
num()n=5;cout<<"构造函数执行\n";
num(num&s)this->n=s.n;cout<<"复制构造函数\n";
~num()cout<<"析构函数执行\n";
// num(int x)n=x;cout<<"带参数的构造函数\n";
int get()return n;
void set(int i)n=i;
num& operator++()

++n;
return *this;

/*num operator++()

++n;
num t;
t.set(n);
return t;
*/
private:
int n;
;
int main()

num i;

//num b=++++++i;
++i;
num b=++i;
cout<<b.get()<<endl;

return 0;

下面那位大神麻烦再通俗一点,菜鸟刚学,看不懂

首先,const num&和num&是不一样的,这是前提。那么C++规定所有在函数重载时这两个参数所生成的签名是不同的,调用系统可以将非const参数隐式转换为const参数以传入函数,但是不能将const 转换为非const传入调用。
这里明显的问题是出在你将++i返回的const num&类型传入了拷贝构造函数,但是系统找不到使用const num&类型的对应重载,因此显示此错误。请将拷贝构造函数进行重载增加num(const num&)或者只提供后者(当拷贝不涉及修改源的情况下)。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
class num

public:
num(int);
num(const num&);
num(num&);
~num();
int n;
const num& operator++()

++n;
return *this;

;
num::num(int a)

n=a;

num::num( const num& b)

this->n=b.n;
cout<<"here is the cpc\n";

num::num( num& b)

this->n=b.n;
cout<<"here is the cpc\n";

int main()

num a(1);
++a;
num b=++a;
system("pause");
return 0;

参考技术A 函数返回值为 const 只有用在函数返回为引用的情况。 函数返回值引用常量表示不能将函数调用表达式作为左值使用。
虽然我看你的错不像是这种类型。。。
参考技术B const num b=++i;应该可以吧!
我没时间把你的程序重新打一遍。只是猜测。
题主把程序贴出来吧!我也很感兴趣呢!

以上是关于c++ operator 的CONST应用的主要内容,如果未能解决你的问题,请参考以下文章

为啥在向量类中实现 operator= 时返回 const 引用

为啥这个函子的 operator() 需要尾随 const 修饰符?

C++ operator关键字详解

C++ Super-FAQ 『Assignment Operators』

operator bool()是什么

C++空类中含有哪些默认的函数