gpt4 book ai didi

c++ - 关于 C++ 声明语法的技巧问题

转载 作者:可可西里 更新时间:2023-11-01 16:29:02 24 4
gpt4 key购买 nike

看这里:在下面的代码中,b 的类型是什么?

struct A {
A (int i) {}
};

struct B {
B (A a) {}
};

int main () {
int i = 1;
B b(A(i)); // what would be the type of b
return 0;
}

如果有人能向我彻底解释为什么会存在这样的语法,我将不胜感激:)

谢谢。

最佳答案

C 的缺点之一(C++ 继承了它(并且使它变得更糟))是没有用于引入声明的特殊语法。这意味着声明通常看起来像可执行代码。另一个例子:

A * a;

这是将 A 乘以 a,还是在声明什么?为了理解这一行,您必须知道 A 是一种类型的名称。

C++ 中的基本规则是,如果某物可以被解析为声明,它就是。在这种情况下,它会导致一个奇怪而令人惊讶的结果。函数声明看起来很像函数调用,尤其是 A 之后的 ( 可以有多种理解方式。

在此示例中,您可以使用额外的括号来解决此问题,从而消除编译器将代码解析为声明的能力。

B b((A(i)));

在 C 中,这并没有歧义,因为没有构造函数,所以没有构造函数调用的函数样式。 A 要么是类型的名称,要么是函数的名称。不能两者兼而有之。

关于c++ - 关于 C++ 声明语法的技巧问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1379932/

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