函数对象的一个小问题
比如说有个类如下:
class Negate
{
public:
int operator() (int n) { return -n;}
};
我看书在使用时,是直接Negate( ),对此我有点不解,Negate( )到底表示什么,表示是新建的Negate类的一个对象吗?如果是的话,为什么可以直接用Negate( )产生新对象?
还是有点不解,比如:
#include
using std::cout;
void Callback(int n,Negate & neg)
{
int val = neg(n); //调用重载的操作符“()”
cout
人气:182 ℃ 时间:2020-10-02 03:33:33
解答
sorry ,看错了题目.Negate( );如果这么写是建立临时对象,建立后马上销毁,调用初始化函数.对象一旦初始化完成,比如:有一个Negate类的对象a那么比如a(n)就是调用其重载的括号运算符 int operator() (int n) { return...“ Negate( );如果这么写是建立临时对象,建立后马上销毁,调用初始化函数。”我就是这里不大理解,可以直接用类名( )这样生成一个对象的?还是这是函数对象的特殊用法?常见的用法,其他的真不多Negate a=Negate( );你可以理解为建立临时对象,用其给另一个对象a赋值,之后销毁。类名加() ,建立临时对象,语句前类对象都没建立不能算类对象的特殊用法吧类对象加() ,就是调用重载函数。类名加()这种建立临时对象的方法我确实没用过,平常都是直接 Negate a 或者 new Negate(),很少用过Negate(),刚测试了下确实可以,长见识了,顺便问下Negate a=Negate( ); Negate()建立的临时对象在这个语句后销毁还是在函数结束后销毁?临时对象应该是在关联的语句结束后就销毁比如单独的Negate( );是直接销毁作为参数是函数返回后销毁但初始化是个问题Negate a=Negate( ); 是建立个新对象a还是把临时变量直接给了a 说不准的感兴趣的话在构造函数和析构函数里个加个输出,看看结果。
推荐
- 仿写下面句子,
- 我国为了保护濒临灭绝的动物,都制定了哪些法律法规?要三条!
- 某市规定,卡车在市区内行驶速度不得超过40km/h,一次一卡车在市区路面紧急刹车后,经2.5s停止,
- 辽阔的一望无际的绿色草原 改病句
- 观察下列等式:1/1*2=1-1/2,1/2*3=1/2-1/3,1/3*4=1/3-1/4,将以上三个等式两边分别相加得:1/1*2+1/2*3+1/3*4=1-1/2+1/2-1/3+1/3-1/4=1-1/4=3/4.(1)直接写出下
- 甲乙两袋糖共重8分之7千克,甲袋重5分之2乙袋糖比甲糖种多少千克
- 已知|a+b-8|+(a-3b)=0,求a的b次方
- 人教版六年级语文《基础训练》第19课《千年梦圆在今朝》精彩挑战怎么写?文章长.打不起来.关于北京申奥
猜你喜欢