是否可以在不创建临时对象的情况下分配一对成员?
#include <tuple>
using namespace std;
pair< bool, int > foo()
{
return make_pair( false, 3 );
}
int main()
{
int x;
bool y;
auto z = foo();
x = z.second;
y = z.first;
return 0;
}
在上面的代码中,需要对象auto z
来保持&#34;解剖它之前的那一对,但它的创建在实际代码中可能很昂贵。
答案 0 :(得分:19)
是; std::tie
是为此发明的:
#include <tuple>
#include <iostream>
std::pair<bool, int> foo()
{
return std::make_pair(false, 3);
}
int main()
{
int x;
bool y;
std::tie(y, x) = foo();
std::cout << x << ',' << y << '\n';
}
// Output: 3,0
当然你仍然会有一个临时对象某处(模数常量优化),但除非你初始化x
和{{{},否则这是你可以编写代码的最直接对象。 1}}直接来自他们的最终值,而不是先在y
内创建一对。
答案 1 :(得分:2)
C ++ 17已经允许您使用结构化绑定声明语法:
#include <iostream>
std::pair<bool, int> foo() {
return std::make_pair(false, 3);
}
int main() {
auto [y, x] = foo(); //Structured binding attribution
std::cout << x << ',' << y << '\n';
}