关于声明语法的技巧问题

看看这里:
在下面的代码中,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是一个类型的名称.

C中的基本规则是,如果某些东西可以被解析为一个声明,那就是.在这种情况下,它会导致一个奇怪和惊人的结果.函数声明看起来很像函数调用,特别是(在A之后可以用几种方式考虑).

您可以在此示例中解决此问题,其中包含删除编译器将代码解析为声明的能力的额外括号.

B b((A(i)));

在C中,这并不模糊,因为没有构造函数调用函数样式,因为没有构造函数. A是类型的名称,或者是函数名称.它不能同时存在.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...