我对C ++中函数的返回类型有疑问。
为什么return pair<int, int>(1, 1);
和return vector<int>(3, 3);
有效?我不应该事先创建一个本地实例var并将其作为返回值,就像返回a一样,因为return int 1;
不起作用。
// ...
int fun1() {
// return int 1;
int a = 1;
return a;
}
pair<int, int> fun2() {
return pair<int, int>(1, 1);
}
vector<int> fun3() {
return vector<int>(3, 3);
}
int main(){
cout << fun1() << endl;
cout << fun2().first << endl;
cout << fun3()[1] << endl;
return 0;
}
返回的样式是否只能应用于具有特定构造函数的类实例?以下示例可以工作。 我正在寻找确认或参考资料。
class A {
public:
int a;
A(int a_) : a(a_) {};
};
A fun4() {
return A(1);
}
代码示例测试:
Apple LLVM 6.0版(clang-600.0.56)(基于LLVM 3.5svn) 目标:x86_64-apple-darwin14.0.0 线程模型:posix
答案 0 :(得分:3)
因为
return int 1
无效。
但return int(1);
确实......或return 3 - 2;
。创建临时或使用文字没有任何问题 - 如果需要,可以使用类复制或移动构造函数在调用者的上下文中设置变量,或者有时返回返回值优化(RVO)将启动并且被调用的函数将能够直接在调用者的堆栈中创建返回值。