Ely*_*Ely -1 c++ constructor return
我偶然发现了这个问题(这是一个不同的例子).大多数人说构造函数不会返回任何内容.但是,为什么我的例子有效呢?
sequence(1, 2)是一个构造函数,显然可以在我的机器上使用.我使用g++和尝试没有选项和C++ 11选项.两者都适用于我的情况.
这个例子来自一门课程.我按原样复制,无论是否public有意义,或其他.
例:
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
void printer(int i) {
cout << i << ", ";
}
struct sequence {
int val, inc;
public:
sequence(int s, int i) : val(s), inc(i) {
cout << "Sequence(" << val << ", " << inc << ")" << endl;
}
operator int() const {//LINE I
int r = val;
cout << r << endl;
return r;
}
};
int main() {
vector<int> v1(7);
fill(v1.begin(), v1.end(), sequence(1, 2)); //LINE II
for_each(v1.begin(), v1.end(), printer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
Sequence(1, 2)
1
1
1
1
1
1
1
1, 1, 1, 1, 1, 1, 1,
Run Code Online (Sandbox Code Playgroud)
谢谢大家的答案.但我仍然很困惑,无法把它放到我的脑海中,我想可能缺少适当的术语.
到目前为止,我想我明白了:
sequence是一个struct对象sequence(int, int) 是构造函数定义,不返回任何内容()operator on sequence只返回val值.那为什么它有效:
sequence(1,2)创建一个可以访问和读取的临时对象()用于填充相应的元件.基本上fill使用sequence()去填补值.fill完成了临时对象被销毁.它的范围是函数的范围fill到目前为止听起来不错吗?