gpt4 book ai didi

c++ - 为什么 C++ 允许我们在声明变量时将变量名括在括号中?

转载 作者:IT老高 更新时间:2023-10-28 12:02:16 26 4
gpt4 key购买 nike

例如这样的声明:

int (x) = 0;

甚至:

int (((x))) = 0;

我偶然发现了这一点,因为在我的代码中我碰巧有一个类似于以下的片段:

struct B
{
};

struct C
{
C (B *) {}
void f () {};
};

int main()
{
B *y;
C (y);
}

显然我想构造对象 C然后它将在其析构函数中做一些有用的事情。然而,编译器会处理 C (y);作为变量 y 的声明类型为 C因此它会打印一个关于 y 的错误重新定义。有趣的是,如果我把它写成 C (y).f ()或类似 C (static_cast<B*> (y))它将按预期编译。最好的现代解决方法是使用 {}当然是在构造函数调用中。

所以我后来发现,可以声明像 int (x) = 0; 这样的变量。甚至int (((x))) = 0;但我从未见过有人真正使用过这样的声明。所以我很感兴趣——这种可能性的目的是什么,因为现在我看到它只会创建类似于臭名昭著的“最令人烦恼的解析”的案例,并且没有添加任何有用的东西?

最佳答案

分组。

作为一个特定的例子,考虑你可以声明一个函数类型的变量,例如

int f(int);

现在,您将如何声明指向此类事物的指针?

int *f(int);

不,不工作!这被解释为返回 int* 的函数。您需要添加括号以使其以正确的方式解析:

int (*f)(int);

对数组也是如此:

int *x[5];   // array of five int*
int (*x)[5]; // pointer to array of five int

关于c++ - 为什么 C++ 允许我们在声明变量时将变量名括在括号中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675601/

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