在C++14中引入了decltype(auto)这个习语。 通常它的用法是允许auto声明在给定表达式上使用decltype规则。 在寻找这个习语的“好”用法的例子时,我只能想到以下类似的事情(由Scott Meyers提供),即用于函数的返回类型推断。 template<type...
据我所了解,auto一直是一个奇怪的存储类别说明符,没有任何实际用途。 然而,我尝试了一下auto的用法,它会根据我赋给它的值来确定类型!使用auto可以让涉及迭代器和其他许多东西的代码更容易编写。 这个关键字从什么时候开始可以使用?这是Visual C++的扩展吗?
随着GCC 4.8.0版本的发布,我们拥有了支持自动返回类型推断的编译器,这是C++14的一部分。使用-std=c++1y,我可以做到这一点: auto foo() { //deduced to be int return 5; } 我的问题是:什么时候应该使用这个功能?什么时候...
请考虑以下内容:template<typename Der> struct Base { // NOTE: if I replace the decltype(...) below with auto, code compiles decltype(&Der...
请考虑下面的代码片段:struct A { auto foo(), bar(); }; auto A::foo() { return 1; } auto A::bar() { return 'a'; } int main() { } 在Clang++ 3.7.0中编译正常。在G++ ...
如预期的那样,在C++11中以下代码会失败,因为该语言不支持常规函数的返回类型推导:auto main() { return 0; } 然而,C++14可以做到,因此我无法解释以下错误(在GCC trunk、clang 3.8和Visual Studio 2015中具有相同的结果):er...
这是一个使用Clang 3.4 SVN和g++ 4.8.1(在两种情况下都使用了std=c++1y)的小实验,涉及到内部友元函数的返回类型推断,这在链接的工作文件中没有记录。#include <iostream> struct A { int a_; friend...
考虑以下代码片段:#include <iostream> #include <vector> #include <functional> int main() { std::vector<int>v = {0,1,2,3,4,5,6}...
这是此问题的跟进。 在评论和答案中,多次提到void{}既不是有效的类型标识符,也不是有效的表达式。 这很好理解,也很合理。 然后我看到了草案中的[7.1.7.4.1/2](占位类型推导)。 那里说到: [...] - 对于在返回类型包含占位符类型的函数中出现的未丢弃的return...
在C++14中,以下代码是否有效? auto main() { // ... } 即使我们不需要使用显式的return 0;,返回类型是否会推断为int?