71得票2回答
通用引用和转发引用有什么区别?

这个函数的参数将会绑定到一个右值引用: void f(int && i); 然而,该函数的参数将绑定到rvalue或lvalue引用之一: template <typename T> void f(T && t); 我经常听到这被称为...

67得票1回答
C++11中的大部分setter函数是否应该编写为接受通用引用的函数模板?

考虑一个类 X,它有 N 个成员变量,每个变量都是可复制和可移动的类型,并且有 N 个对应的 setter 函数。 在 C++98 中,定义 X 的代码可能如下所示:class X { public: void set_a(A const& a) { _a = a; } ...

51得票1回答
在范围for循环中,`auto && e`是什么意思?

假设我当前编写基于范围的循环时的规则是: 尽可能使用for(auto const &e :...)或for(auto &e:...),而不是for(auto a: ...)。 我基于自己的经验和这个问题等原因。 但是在阅读了新的简洁的for循环之后,我想知道,我是否应...

25得票1回答
通用引用的标准/官方名称是什么?

我知道,如果一个变量或参数被声明为具有某个推导类型T的类型T&&,那么这个变量或参数通常被称为通用引用。 术语通用引用是由Scott Meyers在他的原始演讲“Universal References in C++11”中引入的。然而,我想知道官方/标准术语是什么通用引用。

18得票3回答
C++模板函数的行为

假设我有这个函数: bool f(int&& one, int&& two) { } 如果我尝试使用以下代码调用它: int x = 4; f(x, 5); 编译器会报错,指出无法将左值引用转换为右值引用,这是正确的。现在,如果我将f转换成一个模板函...

18得票4回答
何时不应使用`auto&&`?

auto&& mytup = std::make_tuple(9,1,"hello"); std::get<0>(mytup) = 42; cout << std::get<0>(mytup) << endl; 当从...

17得票1回答
当lvalue参数和万能引用同时存在时,lvalue参数是否优先选择lvalue引用作为其形参?

在玩弄通用引用时,我遇到了这样一个情况:clang和gcc在重载解析上存在分歧。 #include <iostream> struct foo {}; template<typename T> void bar(T&) { std::cout <&l...

15得票1回答
通用引用与常量引用的优先级?

当我考虑以下两个重载:template <class... T> void f(const T&... x); template <class T> void f(const T& x); 我有保证,f(x) 总是调用第二个函数,并且永远不会导致歧义。从...

15得票6回答
获得通用引用的优势,而不需要使用通用引用

问题 假设有一个函数func,它接受任何形式为Container<Type, N, Args...>的容器(第一个模板参数为类型,第二个为std::size_t类型的整数,定义了容器中有多少个参数),并且仅当N在40到42之间时,返回其第i个元素。 这样的容器示例包括std::...

14得票3回答
概念轻量级将如何与通用引用交互?

我最近看过这个视频,它解释了C++中的Concepts Lite的思想,这些思想很可能会在今年作为TS出现。现在,我也了解到关于万能引用/转发引用的知识(如这里所描述),以及T&&在不同上下文中有两种含义的情况(即是否进行类型推导)。这自然地引出了一个问题,那就是Concept...