18得票2回答
使用私有成员变量进行返回类型推断

正如在昨天的问答中所解释的那样,g++ 4.8和Clang 3.3都会正确地报告下面的代码错误,例如“'b_'未在此范围内声明”。 #include <iostream> class Test { public: Test(): b_(0) {} auto f...

7得票2回答
函数参数的类型是否可推导?

我有一个使用返回代码的类: class MyClass { // ... public: // ValueType get_value() const; // usual code ErrorCode get_value(ValueTyp...

18得票3回答
三路比较运算符与不一致排序推断

不久前,我定义了我的第一个三路比较运算符。它比较单个类型并替换了多个传统运算符。这是一个很棒的特性。然后,我尝试通过委托实现一个类似的比较两个变体的运算符:auto operator <=> (const QVariant& l, const QVariant& r...

213得票2回答
decltype(auto)的一些用途是什么?

在C++14中引入了decltype(auto)这个习语。 通常它的用法是允许auto声明在给定表达式上使用decltype规则。 在寻找这个习语的“好”用法的例子时,我只能想到以下类似的事情(由Scott Meyers提供),即用于函数的返回类型推断。 template<type...

15得票2回答
施工助手make_XYZ允许RVO和类型推断,即使XZY具有非复制约束。

更新1:C++17为构造函数添加了类型推导,但这并不意味着自由函数是一个劣质解决方案。 更新2:C++17添加了保证的复制省略(即概念上甚至不进行复制)。因此,我的代码现在实际上可以使用最佳性能。但我认为仍然使用花括号初始化返回值的Martinho代码是更干净的解决方案。但请查看Barry的...

10得票2回答
C++14中使用尾返回类型语法的合法用途

现在还有必要使用以下语法吗: template<typename T> auto access(T& t, int i) -> decltype(t[i]) { return t[i]; } 现在我们可以使用: template<typena...

25得票1回答
为什么自动返回类型会改变重载决策?

感谢 C++11 中的 decltype 作为返回类型,使得引入装饰器变得非常容易。例如,考虑这个类: struct base { void fun(unsigned) {} }; 我希望为它添加额外的功能,由于我将使用不同种类的装饰器多次进行此操作,因此我首先引入了一个装饰器类,该...

14得票4回答
在函数调用前如何推断出自动类型?

在尝试使用函数返回类型推断时进行实验auto func(); int main() { func(); } auto func() { return 0; } 错误:在推断‘auto’之前使用了‘auto func()’ 是否有一种方法可以在不需要在调用之前指定定义的情况下使用此功能?对...

180得票7回答
何时应该使用C++14的自动返回类型推断?

随着GCC 4.8.0版本的发布,我们拥有了支持自动返回类型推断的编译器,这是C++14的一部分。使用-std=c++1y,我可以做到这一点: auto foo() { //deduced to be int return 5; } 我的问题是:什么时候应该使用这个功能?什么时候...

15得票2回答
CRTP和C++1y返回类型推导

最近我在使用CRTP进行编程时,当使用C++1y函数并推导类型时,遇到了一些令人惊讶的问题。下面的代码是有效的:template<typename Derived> struct Base { auto foo() { return static_c...