<分区>
假设我有这段代码
std::string s = "hello";
std::string* p = &s;
int l = p.length();
Visual Studio 和 CLion 知道点运算符不正确。实际上,当我按下键 . 时,两个 IDE 都将击键提交为 ->
。
既然C++是有类型的,它知道p是一个指针,为什么不结合。和 -> 合二为一?
语法可以一直使用吗?
,如果p是指针,先解引用它,否则直接获取它的成员?
<分区>
假设我有这段代码
std::string s = "hello";
std::string* p = &s;
int l = p.length();
Visual Studio 和 CLion 知道点运算符不正确。实际上,当我按下键 . 时,两个 IDE 都将击键提交为 ->
。
既然C++是有类型的,它知道p是一个指针,为什么不结合。和 -> 合二为一?
语法可以一直使用吗?
,如果p是指针,先解引用它,否则直接获取它的成员?
最佳答案
类可以重载箭头运算符,因此可以存在 .
和 ->
都有效的对象。智能指针(例如 std::unique_ptr
或 std::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++ - Mat 的 convertTo 函数在将灰度图像类型转换为 OpenCV 中的 CV_32F 时提示断言错误
python - Python 适合大型软件项目(不是基于 Web 的)吗?
c++ - 如何以编程方式在 Eclipse 中获取 "available software sites"
eclipse - 如何在 Eclipse 中编辑(运行时)类路径?
javascript - 枚举作为 JSDoc 中的 @param 类型