[英]Syntax using the return value from an overloaded -> operator
所以我想我可能會過度思考這一點,但我想知道是否有人可以澄清為什么以下語句在給定代碼中有效
f->hello();
這是代碼
struct bar
{
void hello()
{
std::cout << "Hello World";
}
};
struct foo
{
bar* f;
foo() {
f = new bar();
}
~foo() {
delete f;
}
bar* operator->() {
return f;
}
};
int main()
{
foo f;
f->hello(); //Works
}
由於以上代碼返回指針
bar* operator->() {
return f;
}
should'nt
f->hello(); actually be f->->hello();
為什么f-> hello()工作和f - > - > hello()失敗? 我認為f - > - > hello()應該起作用的原因是因為
f->ptrReturned->hello();
如果我們重載 - >運算符,我們需要返回一個ptr類型嗎? 形成我嘗試過的似乎不允許返回對象類型
顯然,這就是重載operator->
如何工作。 ->
(不包括運算符本身)之前的部分將被重載運算符的返回值替換。 例如, std::unique_ptr::operator->
返回一個指針,然后由->
取消引用。
你的理解基本上是正確的,但是->->
是無效的語法。 您可以使用重載operator->
喜歡
f.operator->()->hello();
//^^^^^^^^^^^^ return the pointer
// ^^^^^^^^^ call hello() on the returned pointer
f->hello()
被視為與f.operator->()->hello()
相同f.operator->()->hello()
; 這使得使用帶有重載operator->
(例如智能指針 )的類與內置指針一致。 用法更自然,並且可以在更一般的上下文(如模板)中與原始指針一起使用。
和,
如果我們重載 - >運算符,我們需要返回一個ptr類型嗎?
有一些限制 :
運算符 - >的重載必須返回一個原始指針,或返回一個對象(通過引用或按值),而運算符 - >又被重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.