C++ 后增量中的指针++;运算符重载

C++ 后增量中的指针++;运算符重载,c++,pointers,operator-overloading,C++,Pointers,Operator Overloading,运算符重载函数创建一个指向*的对象oldState。这是什么意思?是否将本地对象的地址分配给oldState?或者是使用=运算符重载(调用复制构造函数)。它有什么作用 要返回*oldState,它不是超出范围了吗,因为您没有在堆上声明它?return*oldState似乎是一个bug,应该返回oldState 返回oldState没有问题,因为它在堆栈上返回一个副本 Clock oldState=*这个indead是否制作副本并将其存储在oldState中返回*oldState似乎是一个bug,

运算符重载函数创建一个指向*的对象oldState。这是什么意思?是否将本地对象的地址分配给oldState?或者是使用=运算符重载(调用复制构造函数)。它有什么作用


要返回*oldState,它不是超出范围了吗,因为您没有在堆上声明它?

return*oldState
似乎是一个bug,应该
返回oldState

返回oldState没有问题,因为它在堆栈上返回一个副本


Clock oldState=*这个
indead是否制作副本并将其存储在oldState中

返回*oldState
似乎是一个bug,应该
返回oldState

返回oldState没有问题,因为它在堆栈上返回一个副本


Clock oldState=*这个
indead是否制作副本并将其存储在oldState中

*此
时钟的当前实例。正如您正确地说的,这将调用复制构造函数,但此方法应该
oldState

*这是
时钟的当前实例。正如您正确地说的,这将调用复制构造函数,但此方法应该
oldState

将当前状态复制到堆栈上分配的新对象
Clock
,然后真正执行增量操作,然后返回以前保存的对象(除了我确实认为有输入错误,在
oldState
之前不应该有
*
,否则它将无法编译)

这是预期的行为,因为后缀增量应该返回增量之前对象的状态。在int上,它不会让你吃惊吗

Clock Clock::operator++(int x)
{
    Clock oldState= *this;
    tick();

    return *oldState;
}
输出将为
3


对于所有支持后缀增量的对象,也应该发生同样的情况。

将当前状态复制到堆栈上分配的新对象
时钟
,然后真正执行增量操作,然后返回以前保存的对象(除了我确实认为有一个输入错误,在
oldState
之前不应该有
*
,否则它将无法编译)

这是预期的行为,因为后缀增量应该返回增量之前对象的状态

Clock Clock::operator++(int x)
{
    Clock oldState= *this;
    tick();

    return *oldState;
}
输出将为
3

对于所有支持后缀增量的对象,都应该发生同样的情况。

首先是这些代码

unsigned int i = 2;
std::cout << ++i << std::endl;
无效,因为返回的表达式无法转换为类型Clock。返回表达式的类型为Clock*not Clock。正确的运算符可以按以下方式查看

Clock Clock::operator++(int x)
{
    Clock oldState= *this;
    tick();

    return *oldState;
}
此声明

Clock Clock::operator++( int )
{
    Clock oldState= *this;
    tick();

    return oldState;
}
表示使用应用于原始对象(即*this)的复制构造函数创建名为oldState的新对象。此对象由函数返回。

首先是这些代码

unsigned int i = 2;
std::cout << ++i << std::endl;
无效,因为返回的表达式无法转换为类型Clock。返回表达式的类型为Clock*not Clock。正确的运算符可以按以下方式查看

Clock Clock::operator++(int x)
{
    Clock oldState= *this;
    tick();

    return *oldState;
}
此声明

Clock Clock::operator++( int )
{
    Clock oldState= *this;
    tick();

    return oldState;
}

表示使用应用于原始对象的复制构造函数创建名为oldState的新对象(即*this)。此对象由函数返回。

oldState
不是指针,因此它不能指向任何东西。它是
*this
的副本。
*oldState
的意思是任何人都猜不透的。可能有一元
运算符*
重载了
时钟
oldState
不是指针,因此它不能指向任何东西。它是
*此
的副本。
*oldState
的意思是什么,任何人都猜不透。可能有一元
运算符*
重载了
时钟
。谢谢你的回答。如果你在函数中声明oldState,它会超出范围吗?如果你按值返回它,它不会超出范围-如果你按值返回它引用或作为指针,您将遇到问题,但当您按值返回时,将为调用者创建一个副本=)
*oldState
可能不是type
Clock*
。如果它能编译的话,它就相当于
oldState.operator*()
,它的类型可以转换为
Clock
,但这真的很奇怪。这可能只是个错误。谢谢你的回答。如果您在函数中声明oldState,那么返回oldState是否会超出范围?如果您按值返回它,则不会-如果您按引用或指针返回它,则会出现问题,但当您按值返回时,会为调用方生成一个副本=)
*oldState
可能不是type
Clock*
。如果它能编译的话,它就相当于
oldState.operator*()
,它的类型可以转换为
Clock
,但这真的很奇怪。这可能只是个错误。