我正在阅读以下 C++17 代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <fstream>
#include <tuple>
using namespace std;
enum class Relationship { parent, child, sibling };
struct Person { string name; };
struct Relationships
{
vector<tuple<Person, Relationship, Person>> relations;
void add_parent_and_child(const Person& parent, const Person& child)
{
relations.push_back({parent, Relationship::parent, child});
relations.push_back({child, Relationship::child, parent});
}
};
struct Research
{
Research (Relationships& relationships)
{
auto& relations = relationships.relations;
for(auto&& [first, rel, second] : relations)
{
if(first.name == "John" && rel == Relationship::parent)
{
cout << "John has a child called " << second.name << endl;
}
}
}
};
int main()
{
Person parent {"John"};
Person child1 {"Chris"}, child2 {"Matt"};
Relationships relationships;
relationships.add_parent_and_child(parent, child1);
relationships.add_parent_and_child(parent, child2);
Research _(relationships);
return 0;
}
该代码可以编译并且工作正常。我没有得到的是这条线:
Research _(relationships);
为什么会有下划线?这是 C++17 的新特性吗?这叫什么?