【发布时间】:2015-11-03 07:21:45
【问题描述】:
我偶然发现了这个question(这是一个不同的例子)。大多数人说构造函数不返回任何东西。 但是,为什么我的示例有效?
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;
}
结果:
Sequence(1, 2)
1
1
1
1
1
1
1
1, 1, 1, 1, 1, 1, 1,
更新
谢谢大家的回答。但我仍然很困惑,无法进入我的脑海,我认为可能缺少正确的术语。
到目前为止,我想我明白了:
-
sequence是一个struct对象 -
sequence(int, int)是构造函数定义,不返回任何内容 -
sequence上的()运算符仅返回val值。
那么为什么它会起作用:
- 对
sequence(1,2)的调用会创建一个可以访问和读取的临时对象 -
()用于填充相应的元素。基本上fill使用sequence()来获取要填写的值。 - 在
fill完成后,临时对象被销毁。它的作用域是函数fill的作用域
到目前为止,这听起来对吗?
【问题讨论】:
-
请定义
work。这里的working是什么?你期待什么? -
因为你有一个
operator int()用于将sequence对象转换为int -
注意,
public在你的struct中真的没用 -
@Elyasin “我的问题是不是有点愚蠢?” 是的,因为根据定义,构造函数
return没有任何意义。
标签: c++ constructor return