gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:08 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/52587719/

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