C++重載運算符的調用者是誰?
C++重載運算符的調用者是誰,假如調用者是重載對象的話,A a = b;這個語句,C++構造函數沒有返回值,那A a就沒有返回東西,這個賦值運算符的調用者是誰啊,
再比如說cout &<&< a,a的頭文件里重載了&<&<作為全局函數,那使用時它的調用者是誰,cout還是a?
調用者從來都是語句所處的當前函數啊,什麼時候成對象了
成員函數的調用者也是當前函數啊
main的調用者是操作系統啊,操作系統也是跑了一個「廣義的」函數來調用你的main的啊
怕你繞不過來
int main()
{
printf("hello world");
}
printf的調用者是main
int main()
{
std::vector&
a.push_back(1);
}
vector::push_back的調用者是main
void foo()
{
std::cout &<&< "hello world";
}
int main()
{
foo();
}
重載operator&<&<的調用者是foo,foo的調用者是main
A a = b; 調用的不是operator=(),所以你的問題不成立
全局的operator&<&<有兩個參數,沒有this指針,不存在調用者——其實C++根本就沒有調用者這個概念,我假設你要問的是this指針是誰。
C++的對象方法調用,沒有太多特別之處。
class Fucker
{
void fuck(int target, float time);
}
基本上就是:
struct Fucker;
void fucker_fuck(Fucker* this, int target, float time);
當然,實際上還是有一些區別的,比如this call什麼的,不過現階段對你不重要。
而重載運算符,只不過是名字有些鬼畜的函數而已,和普通的全局函數/成員函數沒有什麼實質的區別。比如這兩個函數:
Fucker operator + (const Fucker a, const Fucker b);
Fucker deep_dark_fantasy(const Fucker a, const Fucker b);
並沒有什麼實質的區別,無非是C++硬點前一個函數可以以a+b的形式被調用,語法糖而已。
於是,整件事情的「調用者」,基本上沒什麼值得深究的問題。
A a = b;
調用構造函數A::A(const A b)cout &<&< a;調用朋元函數std::ostream operator&<&<(std::ostream os, const A a)謝邀
------
A a=b是調用了C++默認生成的一個重載的"=",就是簡單的吧b中的值複製到a中
假想代碼大概是這樣(不知道對不對,歡迎指正)
A operator=(const A x)
{
//複製
return A;
}
即=運算符調用a和b做了複製值並返回了一個類a的引用
---
經大佬 @vczh 提醒,確實不對,補張圖吧
是調用了默認的拷貝構造函數
A(const A a )
&<&<的重載是這樣的
即&<&<調用輸出流(類對象cout)和p,合併成一個輸出流之後返回這個輸出流 舉個例子:ostream operator&<&<(ostream cout,const Point a)
{
cout&<&
cout&<&<"Hello "&<&<""world"&<& "world"&<& "Hello "&<& cout&<& 這樣應該就比較清楚了 同時也會想到如果數據較多的話,速度會比較慢
大兄弟,建議你把輪子哥@vech 開過光的C++ Primer 5th 從第七章類開始看。這個問題你就完全明白了.
A a = b; 調用的不是運算符重載,而是 A 的複製構造函數。
cout&<&「調用者」意思不明,請釐清調用者的意思。
在win32下面,就是傳參時寄存器ecx的值 this
推薦閱讀:
※C++中int A::*a里的指針a是什麼?
※為什麼使用virtual關鍵字在C++與C#會出現不同的效果?求解答。
※【C語言】關於C裡面數組批量初始化?
※知乎上看到一些人評價c++的exception很難用,想問一下大家寫c++時怎麼處理錯誤?
TAG:CC |