说我有这个代码
std::string s = "hello";
std::string* p = &s;
int l = p.length();
Visual Studio和CLion知道点运算符不正确。实际上,当我按下键。时,两个IDE都将键盘击键提交为->
。
由于输入了C ++,它知道p是一个指针,为什么不合并。然后->合并成一个?
语法是否可以始终使用.
,如果p是指针,请先取消引用,否则直接获取其成员?
答案 0 :(得分:4)
类可以重载arrow运算符,因此可以存在.
和->
都有效的对象。智能指针(例如std::unique_ptr
或std::shared_ptr
)和迭代器是常见示例。
std::unique_ptr<Foo> f;
f.reset(new Foo(42));
f->bar();
您可以设计没有这种区别的静态类型语言吗?当然。但是C ++是以这种方式发展的,在不破坏大量代码的情况下,今天就无法更改。