(原創) 是否該用this這個keyword? (C/C++)
一般人很少會用this這個keyword,可是為什麼在我的程式碼中會使用this呢?
大部分會使用到this,是想將整個物件當參數傳給其他function,如

但我常常在member function內使用this,有幾個理由
1.利用visual studio的intellisense
打了this->後,intellisense會列出所有可用的data member和member function,你只要挑就好了,不用去強記,也可避免打錯。
2.this能清楚的表示class自己的member function
如以下寫法



請問func2到底是個global function?還是某個namespace下的function?還是class自己的member function?若用以下寫法



就能明確的表示是class自己的member function,非常清楚。
3.this能清楚的表示class自己的data member
如以下寫法

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

compile可過,但執行結果是錯的,因為C++已經遇到第10行

已經傻眼了,到底哪個是variable,哪個是data member?
若改成

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

則程式就對了,10行的

this->i為data member,i為variable。
所以只要是data member,我一律加上this,這樣就可明確的分辨data member和variable。
4.在class template中使用this避免錯誤
在使用class template且使用繼承機制時,如以下程式

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

41

42

43

44

45

46

執行結果




請問36行的exit()是哪一個exit()?在VC 8.0,選擇的是Derived<T>::exit(),不過在不同compiler並非如此,在『C++ Template全覽』p.45提到

對於這種情形,『C++ Template全覽』p.45的建議是

37行

明確的呼叫Derived<T>::exit();
38行

明確的呼叫Base<T>::exit();
39行

明確的呼叫Global function。
Conclusion
this的習慣,是我從C#帶來的,因為C++也適用,所以就繼續用了,這是我個人的小習慣,雖然讓程式到處多了this這個沒用的東西,卻讓程式碼更清楚。
Reference
C++ Templates全覽 p.45,侯捷 / 榮耀 / 姜宏 譯, 碁峰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步