Questions tagged «auto»

auto关键字在C ++ 11中被重新用作推导类型。当用于替换初始化变量声明中的类型名称时,该变量的类型与初始化程序相同。当用作返回类型时,将返回类型指定为尾随返回类型,或从return-expression推导得出。


14
C ++ 11 auto关键字多少钱?
我一直在使用autoC ++ 11标准中的new 关键字来处理复杂的模板化类型,这是我认为它的设计目的。但是我还将它用于诸如以下的事情: auto foo = std::make_shared<Foo>(); 更怀疑的是: auto foo = bla(); // where bla() return a shared_ptr<Foo> 关于这个主题,我还没有看到太多讨论。auto由于类型通常是文档和健全性检查的一种形式,因此似乎可以过度使用。您在哪里划界线auto?此新功能的建议用例是什么? 需要澄清的是:我不是在征求哲学意见;我要求标准委员会提供此关键字的预期用途,并可能对在实践中如何实现预期用途提出意见。 旁注:此问题移至SE.Programmers,然后返回到堆栈溢出。关于这个的讨论可以在这个元问题中找到。

4
auto &&告诉我们什么?
如果您阅读类似的代码 auto&& var = foo(); foo根据type的值返回的任何函数在哪里T?然后var是rvalue类型的左值引用T。但是,这意味着var什么呢?这是否意味着我们被允许窃取的资源var?是否有任何合理的情况下,您应该auto&&像unique_ptr<>告诉您拥有独占所有权时一样,告诉读者您的代码?那例如什么T&&时候T是类类型呢? 我只是想了解一下,是否还有auto&&模板编程之外的其他用例?就像Scott Meyers 在本文“ 通用参考”中的示例中所讨论的一样。

2
decltype(auto)有什么用?
Наэтотвопросестьответына 堆栈溢出нарусском:Конструкцияdecltype(自动) 在c ++ 14中,decltype(auto)引入了惯用语。 通常,它的用途是允许auto声明使用decltype给定表达式上的规则。 在搜索“良好”使用该用法的示例时,我只能想到以下内容(由Scott Meyers撰写),即函数的返回类型推导: template<typename ContainerType, typename IndexType> // C++14 decltype(auto) grab(ContainerType&& container, IndexType&& index) { authenticateUser(); return std::forward<ContainerType>(container)[std::forward<IndexType>(index)]; } 还有其他使用此新语言功能的示例吗?

7
C ++自动关键字。为什么魔术呢?
从我用来学习C ++的所有材料中,auto一直以来都是一个奇怪的存储期限说明符,没有任何用处。但是就在最近,我遇到了将其本身用作类型名称的代码。出于好奇,我尝试了一下,它假定了我碰巧分配给它的任何类型! 突然地,STL迭代器以及所有使用模板的东西都易于编写10倍。感觉就像我在使用像Python这样的“有趣”语言。 这个关键词在我的一生中都在哪里?您会说这是Visual Studio专用的还是便携式的,从而破坏了我的梦想?
144 c++  types  c++11  auto 

14
在C ++中用auto声明变量是否有缺点?
似乎auto在C ++ 11中添加了相当重要的功能,该功能似乎遵循了许多较新的语言。与Python之类的语言一样,我没有看到任何显式的变量声明(我不确定是否可以使用Python标准)。 使用auto声明变量而不是显式声明变量是否有缺点?

6
在C ++ 11中用“ auto”推论得出的lambda类型是什么?
我认为lambda的类型是函数指针。当我执行以下测试时,我发现它是错误的(演示)。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上面的代码缺少任何意义吗?如果不是,那么typeof用auto关键字推导的lambda表达式是什么?
141 c++  lambda  c++11  typeof  auto 

4
为什么可以在私有类型上使用auto?
我惊讶地发现以下代码可以编译并运行(vc2012&gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << b.i; } 这段代码编译正确吗?为什么正确呢?为什么我auto不能使用它的名称(如预期的那样)而使用私有类型?

2
功能标题中的箭头运算符(->)
我遇到以下代码: template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) { return a+b; } 我无法理解的一件事是: 在哪里可以找到箭头->标题()在函数标题中的含义?我完全从逻辑上猜测,->运算符确定auto要推导的类型,但是我想弄清楚这一点。我找不到任何信息。
128 c++  c++11  auto  decltype 

7
为什么auto a = 1;用C编译?
代码: int main(void) { auto a=1; return 0; } 文件扩展名为.c时,MS Visual Studio 2012编译器将编译该文件而不会出现错误。我一直认为,当您使用.c扩展名时,应根据C语法而不是C ++进行编译。而且,据我所知,自C ++ 11起,只有在C ++中才允许不带类型的auto ,这意味着从初始化程序推导出类型。 这是否意味着我的编译器不坚持使用C,或者代码在C语言中实际上是正确的吗?
125 c  auto  c11 

6
Lambda回归自我:这合法吗?
考虑这个相当无用的程序: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } 基本上,我们试图制作一个返回自身的lambda。 MSVC编译程序,然后运行 gcc编译程序,并进行段错误 clang拒绝该程序并显示一条消息: error: function 'operator()<(lambda at lam.cpp:6:13)>' with deduced return type cannot …

3
通用Lambda在C ++ 14中如何工作?
通用Lambda如何auto在C ++ 14标准中工作(关键字作为参数类型)? 它是否基于C ++模板,其中每个不同的参数类型,编译器都会生成具有相同主体但被替换类型的新函数(编译时多态性)?或者它更类似于Java的泛型(类型擦除)? 代码示例: auto glambda = [](auto a) { return a; };
114 c++  lambda  auto  c++14 

6
Java是否有自动类型推断功能?
autoJava中是否像C ++中一样有变量类型? 一个例子: for ( auto var : object_array) std::cout << var << std::endl; for( auto var : object_array) var.do_something_that_only_this_particular_obj_can_do(); 我知道Java中有一个增强的for循环,但是有自动吗?如果不是,是否有这样做的技巧?我指的是C ++ 11中的新功能
113 java  c++  auto 

4
尾随返回类型的语法样式是否应该成为新的C ++ 11程序的默认样式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 C ++ 11支持新的函数语法: auto func_name(int x, int y) -> int; 当前,此函数将声明为: int func_name(int x, int y); 新样式似乎尚未被广泛采用(例如在gcc stl中) 但是,这种新样式是否应该在新的C ++ 11程序中到处都是首选,还是仅在需要时使用? 就个人而言,我尽可能地选择旧样式,但是混合样式的代码库看起来很难看。

4
C ++自动与自动
创建局部变量时,使用(const) auto&或auto是否正确? 例如: SomeClass object; const auto result = object.SomeMethod(); 要么 const auto& result = object.SomeMethod(); SomeMethod()返回非原始值的地方-可能是另一个用户定义的类型。我的理解是const auto& result正确的,因为SomeMethod()返回的结果将为返回的类型调用复制构造函数。如果我错了,请纠正我。 原始类型呢?我认为const auto sum = 1 + 2;是正确的。 这是否也适用于基于范围的for循环? for(const auto& object : objects)
88 c++  auto 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.