我想我理解具有如下签名的函数:
void f(std::string&&):
Run Code Online (Sandbox Code Playgroud)
它将应用于右值以重用其资源。然而,我偶尔会看到这样的代码:
std::string t();
std::string&& s = t();
Run Code Online (Sandbox Code Playgroud)
其中变量被初始化为右值引用。(这里我写了 t 按值返回,但如果按左/右值引用返回时行为不同,有兴趣知道)。
通常,我在有关 C++ 的帖子/谜题中看到这一点,而不是在生产代码中。
我有几点想了解一下:
我正在尝试编写一个函数,如果在运行时传递的参数包含在编译时设置的整数列表中,则该函数的计算结果为 true。我尝试在这里调整打印示例:https://www.geeksforgeeks.org/variadic-function-templates-c/# :~:text=Variadic%20templates%20are%20class%20or,help%20to%20overcome%20this% 20期.
并尝试过这个:
bool Contains(int j) { return false; }
template<int i, int... is>
bool Contains(int j) { return i == j || Contains<is...>(j); }
Run Code Online (Sandbox Code Playgroud)
但是,它给了我一个编译器错误,指出“'包含':找不到匹配的重载函数”。
我尝试过摆弄尖括号,但似乎无法让它工作。