[英]calling function whose name is class name itself?
我不知道他們使用什么方法,因為代碼庫很大 。
它定義了一個這樣的類:
class ABC {
member_func(string c);
};
main() {
ABC("").member_func("this random string");
}
什么使我們能夠調用ABC("");
缺少的代碼ABC("");
?
我沒有在任何地方創建該類的任何對象。
這只是構造了一個ABC
類型的對象,但沒有使用該對象初始化任何永久內存位置。 即,調用ABC
構造函數創建的初始化對象是一個臨時對象,並且在調用后丟失,因為它不是在調用后可以訪問的內存位置中構造的,例如堆棧上的自動變量,靜態內存因此,進行類似“現實世界”中可用的調用的“缺失”代碼實際上是為構造的對象命名,以便以后可以訪問...例如,諸如ABC my_object("");
類的ABC my_object("");
或ABC my_object = ABC("");
。
更新:在您發布的更新代碼中,正在發生的是再次構造了一個ABC
類型的臨時對象,然后在該調用所創建的臨時對象上調用了名為member_func
ABC
類的非靜態方法。交給ABC
的構造函數。 當然,對於此代碼在“現實世界”中具有任何含義,對member_func
調用將必須包含一些在類實例外部可見的副作用(即,類實例可能包含一個數據成員) (指向該共享內存對象的指針,然后調用對其進行修改)。 盡管從您發布的代碼示例來看,該調用似乎沒有任何副作用,但出於所有目的和目的,它都是非操作的……創建了一個臨時的ABC
類實例,它有一個稱為在實例上,然后對該實例的任何引用都將丟失,因為它不是在main()
當前作用域可訪問的內存位置中構造的。
class ABC
{
std::string d;
public:
ABC(std::string x) // For the ABC("").
{ d = x; }
void foo(std::string x) // For the foo("").
{ std::cout << d << std::endl << x << std::endl; }
};
int main()
{
ABC("This creates a temporary object.").foo("This calls foo().");
// Is the same as...
{
ABC obj("This creates another object.");
obj.foo("This calls obj.foo().");
} // obj is destroyed.
return(0);
}
自我解釋...我希望。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.