繁体   English   中英

方法签名C ++

[英]Method signature C++

无法理解C ++中的方法签名。 寻找第二意见。

readPage(File* file, const PageId pageNo, Page*& page) {}

上面可以重写如下吗?

readPage(File *file, const PageId pageNo, Page *&page) {}

那么,* file是要传入的指针,而*&page是要转换为指针的东西的地址吗? 我对*&的组合感到困惑

file是指向File的指针,这意味着对其指向的内容进行任何更改,例如

file->doSomething(); // the caller will see this change

会在调用方看到,但是如果覆盖指针,不仅调用者不会看到指针的新值,而且此后对文件的任何更改也不会被观察到,因为它是一个现在指向另一个File的指针,因为指针本身是通过值传递的。

file = new File(); // the caller will not see this change
file->doSomething(); // neither will it see this one

现在, page是对指向Page的指针的引用。 换句话说,它的行为就像一个指针,因此

page->doSomething(); // the caller will see this change

仍然被呼叫者观察到。 但是现在,如果您覆盖指针,则调用者的指针也将被更改,因此所有连续的更改也将被看到:

page = new Page(); // caller also sees this change
page->doSomething(); // and this too

这是因为指针本身是通过引用传递的,因此调用者可以观察到指针本身的任何更改。

(是的,放置空间的方式无关紧要,因此您提供的两种方式是相同的)

Page *&是指向页面的指针

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM