กฎที่foo->bar
เท่ากับ(*foo).bar
เก็บสำหรับตัวดำเนินการ builtin เท่านั้น
เอกoperator *
ไม่ได้มีความหมายของตัวชี้ที่อ้างถึงเสมอไป ฉันสามารถสร้างห้องสมุดซึ่งมันหมายถึงเมทริกซ์ขนย้ายการแยกวิเคราะห์ตรงข้ามหรือเป็นศูนย์หรือมากกว่าอะไรก็ได้
มันจะทำให้ภาษาน่ารำคาญยิ่งกว่าเดิมหากมีสิ่งใดที่เกินความเป็นเอกภาพในoperator *
ทันทีที่ได้รับสิ่งที่operator ->
คุณไม่ได้ขอด้วยความหมายที่อาจไม่สมเหตุสมผล
operator ->
สามารถโอเวอร์โหลดได้แยกต่างหากดังนั้นหากคุณต้องการคุณสามารถโอเวอร์โหลดได้อย่างง่ายดาย
นอกจากนี้โปรดทราบว่าการโอเวอร์โหลดดังกล่าวจะมีคุณสมบัติที่ค่อนข้างน่าสนใจเช่นการผูกมัดoperator ->
สายอัตโนมัติจนกระทั่งหนึ่งในห่วงโซ่ส่งกลับตัวชี้ดิบ สิ่งนี้มีประโยชน์มากสำหรับพอยน์เตอร์พอยน์เตอร์และพร็อกซีประเภทอื่น ๆ
#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>
#include <string>
#include <iostream>
#include <ostream>
struct Foo
{
boost::shared_ptr<std::string> operator -> () const
{
return boost::make_shared<std::string>("trololo");
}
};
int main()
{
Foo foo;
std::cerr << foo->size() << std::endl;
}