0

我正在阅读以下 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 的新特性吗?这叫什么?

4

1 回答 1

0

哇,原来是一个变量名,在 C++17 中有效。这是一种非常懒惰的命名方式。

于 2019-09-14T04:21:52.323 回答