gpt4 book ai didi

c++ - 在数组上使用 -> 运算符

转载 作者:太空狗 更新时间:2023-10-29 19:41:44 24 4
gpt4 key购买 nike

我只是偶然发现了这个奇怪的语法。您实际上可以在数组上使用 operator->。

struct Foo
{
void bar() { }
};

int main()
{
Foo foo[3] = { Foo(), Foo(), Foo() };
foo->bar();
}

我认为 operator-> 仅用于指向对象的指针,而且我在这段代码中没有看到任何指针。即使有指针,它们也会因为 Foo 临时对象而成为悬挂指针。是什么让这成为可能?

最佳答案

数组允许衰减为指针,这些指针指向数组的第一个元素。例如,您可以这样做:

void bar(int*) {}

int a[42] = {};
int* b = a; // a decayed to int*, got assigned to b
bar(a); // a decayed to int* to match bar parameter type

在您的示例中,当您应用 -> 运算符时,foo 衰减为指向数组 foo 的第一个元素的指针。下面两个是等价的:

foo->bar();
(&foo[0])->bar();

关于指向对象的有效性,一个数组如

Foo foo[3];

总是包含 3 个默认初始化的 Foo 对象。您所做的是明确地初始化它们,但这并没有改变任何东西。该数组包含用于初始化其元素的对象的拷贝。

关于c++ - 在数组上使用 -> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com