什麼是箭頭運算符(->
)的同義詞?我可以用什麼來代替箭頭運算符,` - >`?
87
A
回答
114
下面的兩個表達式是等效的:
a->b
(*a).b
(受運算符重載,如康拉德提到,但是這是不尋常的)。
61
a->b
通常是(*a).b
的同義詞。括號這裏是必要的,因爲運營商*
和.
:*a.b
的綁定強度將不起作用,因爲.
綁定更強,並首先執行。因此這相當於*(a.b)
。
但是請注意超載:由於->
和*
都可能超載,因此它們的含義可能會有很大差異。
13
我主要是看它的權利到左,並呼籲「在」
foo->bar->baz = qux->croak
變爲:
「巴茲在FOO酒吧成爲qux發牢騷。」
35
C++語言將箭頭運算符(->
)定義爲取消引用指針的同義詞,然後在該地址上使用.
操作符。
例如:
如果你有一個對象,anObject
和指針,aPointer
:
SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;
爲了能夠使用的對象方法中的一種取消引用指針,並做了該地址的方法調用:
(*aPointer).method();
其可以與箭頭操作符來寫:
aPointer->method();
箭頭運算符的existents的主要原因是它縮短了一個非常常見的任務的鍵入,並且它也容易忘記指針取消引用周圍的括號。如果您忘記了括號中的。運營商將結合做強那麼* - 運算符,讓我們的例子中執行如下:
*(aPointer.method()); // Not our intention!
其他一些答案也同時提及的是C++運算符可以過載,它不是那很普通。
14
在C++ 0x中,運營商得到了第二含義,表示函數或lambda表達式
auto f() -> int; // "->" means "returns ..."
相關問題
- 1. 如何使用 - >(箭頭)運算符?
- 2. 在Java中,箭頭運算符' - >'是做什麼的?
- 3. 我可以用什麼來代替char.to_i?
- 4. 我可以用什麼來代替GridView?
- 5. 我可以用什麼來代替KeyChar?
- 6. 我可以用什麼來代替?
- 7. - >帶數組的箭頭運算符?
- 8. Spock中雙右箭頭運算符(>>)的定義是什麼?
- 9. Lambda表達式替換爲什麼我可以使用「%」運算符而不是「>」運算符
- 10. 切換箭頭運算符
- 11. 什麼可以用來代替ob_start(「ob_gzhandler」);
- 12. 爲什麼被用來代替賦值運算符
- 13. 「>>>」運算符 - 用於什麼?
- 14. 我可以在對象的新實例上使用箭頭運算符嗎?
- 15. ' - >'(箭頭運算符)和'。'之間的區別是什麼? (點運算符)在Objective-C?
- 16. 什麼是 - >運算符?
- 17. 什麼是()=>運算符?
- 18. MYSQL <>運算符代替NOT IN
- 19. 我可以使用什麼來代替滑動抽屜
- 20. MEF 4.5中缺少CompositionInitializer。我可以用什麼來代替?
- 21. 我可以用什麼來代替#sql表中的sql函數
- 22. 我可以使用什麼來代替Java中的Vector?
- 23. 我可以使用什麼來代替mysql_fetch_array?
- 24. 我還可以使用什麼來代替HashMap?
- 25. 我們可以使用什麼來代替模型?
- 26. Windows Phone SDK - 我可以使用什麼來代替System.Web?
- 27. 我可以用什麼來代替strstream :: freeze?
- 28. 我還可以用什麼來代替Jquery選擇器的類?
- 29. 我可以使用什麼來代替DOMSubtreeModified?
- 30. 我們可以用什麼來代替nstimer?
超載問題的返回類型少了很多不尋常的比你想象的。不久前,STL實現者對於某些迭代器類型沒有重載的` - >`運算符,所以你*有*使用`* .`。許多圖書館對它們的定義不一致。當您使用模板並且不知道確切的類型時變得非常煩人。 – 2008-10-21 10:15:00
編輯完成後,我認爲你的帖子會以很好的方式召喚它。 – 2008-10-21 10:16:54
你也可以做`a [0]。b`而不是`(* a).b`。但它不會像結構合理。 – 2013-06-19 03:35:11