由于C ++知道类型,因此可以推断点和箭头吗?

时间:2019-04-23 19:32:56

标签: c++ ide

说我有这个代码

std::string s = "hello";
std::string* p = &s;
int l = p.length();

Visual Studio和CLion知道点运算符不正确。实际上,当我按下键时,两个IDE都将键盘击键提交为->

由于输入了C ++,它知道p是一个指针,为什么不合并。然后->合并成一个?

语法是否可以始终使用.,如果p是指针,请先取消引用,否则直接获取其成员?

1 个答案:

答案 0 :(得分:4)

类可以重载arrow运算符,因此可以存在.->都有效的对象。智能指针(例如std::unique_ptrstd::shared_ptr)和迭代器是常见示例。

std::unique_ptr<Foo> f;
f.reset(new Foo(42));
f->bar();

您可以设计没有这种区别的静态类型语言吗?当然。但是C ++是以这种方式发展的,在不破坏大量代码的情况下,今天就无法更改。