下面的例子看起来非常简单明了:voidftest(size_t&arg){std::cout但它不会编译(至少使用VS2013),因为i被推断为int而不是size_t。问题是——如果不能依赖条件字段,auto在这样的for循环中有什么意义?如果编译分析整个语句并给出预期结果而不是我们现在得到的结果,会不会太费力和耗时? 最佳答案 因为变量的类型是在声明时确定的(从它的初始值设定项),它与如何使用它无关。如有必要,将考虑类型转换。该规则与显式指定类型声明的变量相同,auto只是帮你推导出类型而已,没什么特别的。试着考虑一下:auto
在可用的C++中,对许多变量使用auto是一种很好的做法,尤其是那些类型已知但输入起来很烦人的变量:weird_template_type::subtype::recursive_subtypesome_function(){//...}//...autoval=some_function();在有意义的情况下,对RAII对象使用显微镜也很好,例如用于锁定:some_setup_code();intval;{lock_guardlk(mut);val=read_shared_memory();}do_something(val);有没有办法混合这两个成语,例如当您的共享内存读取代码返回
我正在尝试用C++实现异构映射。我知道之前已经讨论过这个问题,但我想知道为什么不允许以下内容:mapmyMap;有什么方法可以让我在不借助(void*)指针的情况下简单地插入map?我在考虑最终能够做这样的事情:vectorv;myMap.insert(make_pair(1,12334));myMap.insert(make_pair)(2,v));这可能吗?还是我的努力是徒劳的?谢谢 最佳答案 auto并不意味着“这可以是任何类型”。它是一个特殊的关键字,只能用于声明变量,其含义是“这个变量的类型与用来初始化它的表达式的类型相同
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我试图理解auto在C++中是如何使用的。对我来说,理解某事的最好方法是看一个例子。然而,我看到的例子并不是那么简单。例如这里是“MeaningofC++0xautokeyword,byexample?”。要理解这个例子,我需要知道什么是"template"、“指针”、“malloc”等等。任何人都可以举一个使用auto的简单示例,以便人们可以轻松理解它的
最近我在C++中使用auto时遇到了非常非常奇怪的问题,只是......看看下面的代码片段:我的主要功能:#include#include#includeintmain(){inta=10,b=20,c=30;listwhat;what.push_back(a);what.push_back(b);what.push_back(c);read(what);return0;}这里的函数是:voidread(constlist&con){for(autoit:con){printf("%p\n",&it);cout这是输出:0x7fffefff66a4100x7fffefff66a4200
我在运行时加载的共享库中实例化的对象上使用dynamic_cast时遇到了一个问题,但前提是该类包含一个覆盖另一个方法的方法。我正在使用带有“AppleLLVM3.1编译器”的Xcode4.3我已经在Linux上使用gcc和clang编译了相同的代码并且没有问题所以我假设它是Xcode中的编译器错误但是有有人以前见过这个吗?假设类定义在名为“test3.h”的header中#pragmaonceclassc1{public:virtual~c1();virtualvoidfoo();};classc2:publicc1{public:voidfoo()override;};classc
constauto&如果我想执行只读操作就足够了。但是,我遇到了for(auto&&e:v)//visnon-const最近几次。这让我想知道:与auto&或constauto&相比,在一些模糊的极端情况下使用转发引用是否有一些性能优势?(shared_ptr是模糊角落案例的嫌疑人)更新我在收藏夹中找到的两个示例:Anydisadvantageofusingconstreferencewheniteratingoverbasictypes?CanIeasilyiterateoverthevaluesofamapusingarange-basedforloop?请专注于以下问题:为什么我
使用VisualStudio2014CTP、C++(v140)编译器:autogp=[&](BYTE*buff){autogp1=[](char*bff,char**p1){*p1=strstr((char*)bff,"(");return(*p1);};};错误:conditionalexpressionoftype'void'isillegal(也许auto真的输入错误?)如果我将内部lambda声明为std::functiongp1然后就可以了是我做错了什么还是编译器错误? 最佳答案 我没有运行2014,但您可能需要指定内部l
我正在测试newfeature对于GCC4.9(自动输入参数)并出现一些奇怪的错误。#include#includeautofoo(autov){for(auto&&i:v)std::cout{1,2,3});}这给我以下错误:***glibcdetected***./a.out:munmap_chunk():invalidpointer:0x00007f87f58c6dc0***=======Backtrace:=========/lib/x86_64-linux-gnu/libc.so.6(+0x7e846)[0x7f87f4e4c846]./a.out[0x400803]/lib
#include#includeintmain(){constchara[]="helloworld";constchar*p="helloworld";autox="helloworld";if(typeid(x)==typeid(a))std::cout为什么x被推断为指针,而字符串文字实际上是数组?Anarrowstringliteralhastype"arrayofnconstchar"[2.14.5StringLiterals[lex.string]§8] 最佳答案 auto特性基于模板参数推导,模板参数推导的行为相同,特