c++ - 既然 C++ 知道类型,它能推断出点和箭头吗?

标签 c++ ide

<分区>

假设我有这段代码

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

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

既然C++是有类型的,它知道p是一个指针,为什么不结合。和 -> 合二为一?

语法可以一直使用吗?,如果p是指针,先解引用它,否则直接获取它的成员?

最佳答案

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

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

你能设计一种没有这种区别的静态类型语言吗?当然。但 C++ 已经以这种方式发展,这不是你今天可以在不破坏大量代码的情况下改变的东西。

关于c++ - 既然 C++ 知道类型,它能推断出点和箭头吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55818222/

相关文章:

c++ - Shift 和 ctrl 防止事件发生? (Winapi)

c++ - 如何控制销毁堆对象的顺序?

c++ - Mat 的 convertTo 函数在将灰度图像类型转换为 OpenCV 中的 CV_32F 时提示断言错误

python - Python 适合大型软件项目(不是基于 Web 的)吗?

c++ - Linux 上的 SNMP 支持

c++ - 如何以编程方式在 Eclipse 中获取 "available software sites"

eclipse - 如何在 Eclipse 中编辑(运行时)类路径?

javascript - 枚举作为 JSDoc 中的 @param 类型

visual-studio - Visual Studio 中的全局查找和替换

android - 我应该如何在 Android Studio/intellij idea 中创建字符串?