c++ - return 语句中的构造函数语法?
问题描述
我了解以下代码的所有内容,除了这一行
A f(){return A(i);}
具体来说,我不明白语法A(i)
。我知道它返回类型的值,A
但i
括号中的含义是什么?
它是带有一些变量的构造函数调用吗?
#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;
}
解决方案
A(i)
是一个函数转换表达式。它正在创建一个临时对象A
。i
该过程将调用适当的A
构造函数。
在 C++ 中,程序员无法“调用构造函数”。程序员所做的是在各种地方创建对象,并自动安排构建。函数转换表达式是创建对象的一种方式。
请注意,虽然这正式“创建一个临时”,但复制省略(返回值优化)实际上会使其直接初始化返回值。
推荐阅读
- c# - DataGrid 使用 AutoGenerateColumns=true 启用列的文本换行
- php - 外键约束在生产上失败,但在 localhost 上失败
- botframework - 处理对话 Bot Framework V4 的 WaterfallSteps - Alexa 适配器
- javascript - 如何获取当前工作日javascript
- python - 在 postgres 中的数字列上批量更新为 Null
- node.js - NestJS:如何冒泡/传播异常?
- qt - Qt - 即使后备字体可用,中文也呈现为空框
- python - 如何在熊猫中创建情节?
- url - 如何在实时服务器上修复 Yii2 中的 url?
- html - 试图删除我的用户,但我的代码不起作用