Eva*_*van 9 c++ constructor arguments function
我一直在寻找一个很好的解释,为什么/为什么不将struct构造函数作为函数参数使用是合法的.有人可以提供吗?
// Begin simple illustrative example C++ program
#include<vector.h>
struct Item
{
Item(double data, const int lead)
: m_grid(data), m_lead(lead) {}
double m_grid;
int m_lead;
};
int main()
{
double img = 0.0;
int steps = 5;
std::vector<Item> images;
for (int i = 0; i < steps; i++)
{
img += 2.0;
images.push_back(Item(img,i));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的印象是构造函数既没有返回类型也没有声明......
它不是传递给它的构造函数或返回值push_back.C++实际上使用构造函数来创建一个无名的临时对象,该对象仅在函数调用期间存在; 通常,在堆栈上.然后将其传递给push_back,并将push_back其内容复制到您的向量中.
这是合法的.
你永远不会自己打电话给构造函数; 你实际上只是声明一个未命名或"临时"的类型对象Item.查看使对象未命名时语法如何演变:
Item a(img,i); // normal
Item(img,i); // temporary
Run Code Online (Sandbox Code Playgroud)
尽管看起来好像你正在像构造函数一样调用构造函数,但事实并非如此.
无论如何,你可以在函数参数等中使用临时作为"右值"(因为它是一个),这就是你在这里所做的.
顺便说一句,不要使用旧的iostream.h和vector.h标头.它们早于1998年.在ISO标准C++中,你应该分别使用iostream和vector.C++中的标准头文件不以".h"结尾(inb4,忽略为了向后兼容而继承的C头).
| 归档时间: |
|
| 查看次数: |
5678 次 |
| 最近记录: |