本篇 ShengYu 介紹 C++ 裡 lhs 與 rhs 是什麼?
那我們就開始吧!
看到參數名稱有 lhs 跟 rhs,lhs 全名是 left-hand side 指的是左側,想成等號的左側,同理,rhs 全名是 right-hand side 指的是右側,想成等號的右側,
以下舉個例子來說明 lhs 跟 rhs 的差異,
1 | // g++ lhs-rhs.cpp -o a.out -std=c++11 |
這邊寫個 Size 的 class,並且加上 operator==
可以比較兩個 Size 內容是否相同的功能,
所以 if (s1 == s2)
判斷式裡,s1 就是 lhs,s2 就是 rhs,
我們可以在 operator==
函式裡印出來就知道,結果如下,1
2
3lhs=0,0
rhs=10,20
not equal
這次我們加上 operator+=
來試試,使用 operator+=
來做 Size 的累加,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40// g++ lhs-rhs-2.cpp -o a.out -std=c++11
using namespace std;
class Size {
public:
Size() {}
Size(int w, int h) : width(w), height(h) {}
int width = 0;
int height = 0;
};
inline bool operator==(const Size& lhs, const Size& rhs) {
cout << "lhs=" << lhs.width << "," << lhs.height << "\n";
cout << "rhs=" << rhs.width << "," << rhs.height << "\n";
return lhs.width == rhs.width && lhs.height == rhs.height;
}
inline Size& operator+=(Size& lhs, const Size& rhs) {
cout << "lhs=" << lhs.width << "," << lhs.height << "\n";
cout << "rhs=" << rhs.width << "," << rhs.height << "\n";
lhs.width += rhs.width;
lhs.height += rhs.height;
return lhs;
}
int main() {
Size s1;
Size s2(10, 20);
s1 += s2;
cout << "s1=" << s1.width << "," << s1.height << "\n";
Size s3(20, 40);
s3 += s2;
cout << "s3=" << s3.width << "," << s3.height << "\n";
return 0;
}
所以在 s1 += s2
運算式裡,,s1 就是 lhs,s2 就是 rhs,
而在 s3 += s2
運算式裡,,s3 就是 lhs,s2 就是 rhs,
我們可以印出結果試試,結果如下,1
2
3
4
5
6lhs=0,0
rhs=10,20
s1=10,20
lhs=20,40
rhs=10,20
s3=30,60
其他參考
opencv/modules/gapi/include/opencv2/gapi/own/types.hpp
https://github.com/opencv/opencv/blob/b3db37b99de4d2dcb8c4d8c7568029b3e06893b2/modules/gapi/include/opencv2/gapi/own/types.hpp
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
std::vector 用法與範例
std::deque 介紹與用法
std::queue 用法與範例
std::map 用法與範例
std::unordered_map 用法與範例
std::set 用法與範例
std::thread 用法與範例
std::mutex 用法與範例
std::find 用法與範例
std::sort 用法與範例
std::random_shuffle 產生不重複的隨機亂數
std::shared_ptr 用法與範例
std::async 用法與範例