Return C++ 函数中的匿名 instance/value
Return an anonymous instance/value in functions in C++
我对 C++ 中的 return 函数类型有疑问。
为什么 return pair<int, int>(1, 1);
和 return vector<int>(3, 3);
有效?我不应该事先创建一个本地实例变量并将其作为 return 值,就像 return 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;
}
难道return这样的风格只能应用于class具有特定构造函数的实例吗?下面的例子可以工作。
我正在寻找确认或参考资料。
class A {
public:
int a;
A(int a_) : a(a_) {};
};
A fun4() {
return A(1);
}
测试的代码示例:
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
because return int 1
doesn't work.
但是 return int(1);
确实……或者 return 3 - 2;
就此而言。创建临时变量或使用文字并没有错 - 如果需要,将使用 class 复制或移动构造函数在调用者的上下文中设置变量,或者有时 return Return 值优化 (RVO) 将启动,被调用函数将能够直接在调用者的堆栈中创建 return 值。
我对 C++ 中的 return 函数类型有疑问。
为什么 return pair<int, int>(1, 1);
和 return vector<int>(3, 3);
有效?我不应该事先创建一个本地实例变量并将其作为 return 值,就像 return 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;
}
难道return这样的风格只能应用于class具有特定构造函数的实例吗?下面的例子可以工作。 我正在寻找确认或参考资料。
class A {
public:
int a;
A(int a_) : a(a_) {};
};
A fun4() {
return A(1);
}
测试的代码示例:
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.0.0 Thread model: posix
because
return int 1
doesn't work.
但是 return int(1);
确实……或者 return 3 - 2;
就此而言。创建临时变量或使用文字并没有错 - 如果需要,将使用 class 复制或移动构造函数在调用者的上下文中设置变量,或者有时 return Return 值优化 (RVO) 将启动,被调用函数将能够直接在调用者的堆栈中创建 return 值。