C++ lhs 與 rhs 是什麼?

本篇 ShengYu 介紹 C++ 裡 lhs 與 rhs 是什麼?

那我們就開始吧!

看到參數名稱有 lhs 跟 rhs,lhs 全名是 left-hand side 指的是左側,想成等號的左側,同理,rhs 全名是 right-hand side 指的是右側,想成等號的右側,

以下舉個例子來說明 lhs 跟 rhs 的差異,

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
// g++ lhs-rhs.cpp -o a.out -std=c++11
#include <iostream>
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;
}

int main() {
Size s1;
Size s2(10, 20);

if (s1 == s2) {
cout << "equal\n";
} else {
cout << "not equal\n";
}

return 0;
}

這邊寫個 Size 的 class,並且加上 operator== 可以比較兩個 Size 內容是否相同的功能,
所以 if (s1 == s2) 判斷式裡,s1 就是 lhs,s2 就是 rhs,
我們可以在 operator== 函式裡印出來就知道,結果如下,

1
2
3
lhs=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
#include <iostream>
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
6
lhs=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 用法與範例