函数对象的一个小问题
函数对象的一个小问题
比如说有个类如下:
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
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 说不准的感兴趣的话在构造函数和析构函数里个加个输出,看看结果。