[英]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.