首页 > 解决方案 > return 语句中的构造函数语法?

问题描述

我了解以下代码的所有内容,除了这一行

A f(){return A(i);}

具体来说,我不明白语法A(i)。我知道它返回类型的值,Ai括号中的含义是什么?

它是带有一些变量的构造函数调用吗?

#include <iostream>
using namespace ::std;

class A{
    public:
        int j;
        A(int z){j = z;}
        int g(){return j;}
        int operator+(A a){return a.j + j;}
};
class B{
    public:
        int i;
        B(A a){i = a.j;}
        A f(){return A(i);} // ???
        A operator-(){return A(i);}
};
int main(){
    A a(1);
    B b = a;

    a.j = b.f() + a;
    b.i = a.g();
    a = -b;
    return 0;
}

标签: c++constructor

解决方案


A(i)是一个函数转换表达式。它正在创建一个临时对象Ai该过程将调用适当的A构造函数。

在 C++ 中,程序员无法“调用构造函数”。程序员所做的是在各种地方创建对象,并自动安排构建。函数转换表达式是创建对象的一种方式。

请注意,虽然这正式“创建一个临时”,但复制省略(返回值优化)实际上会使其直接初始化返回值。


推荐阅读