目录auto关键字:起源: auto的使用细则:auto不能推导的场景:范围for:范围for的使用条件: C++的空指针:注意: auto关键字:起源: 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:类型难于拼写含义不明确导致容易出错例如:std::map::iterator于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。简单来说,auto可以从获取的数值中推导出我们想要得到的类型。intmain(){inti=0;int
考虑我最近在我们的代码库中看到的以下示例代码:voidClassA::ExportAnimation(auto_ptranimation){...doessomething}//callingmethod:voidclassB::someMethod(){auto_ptranimation(newCAnimation(1,2));ClassAclassAInstance;classAInstance.ExportAnimation(animation)...dosomemorestuff}我不喜欢这样——我宁愿这样写:voidClassA::ExportAnimation(CAnima
我是C++的新手。我只是尝试一些小代码片段来理解使用GCC4.6.3和-std=c++0x编译的lambda函数。.我知道它不是C++0x的最佳选择,但它支持lambda表达式。我写了这个:intmain(){intval1=0,val2=0;std::cout>val1;std::cout>val2;autoresult=[&val1,&val2](){return(val1+val2);};std::cout我的第一个问题是为什么我必须定义result作为auto当我已经知道预期(隐式)结果将是int?在注释的代码行中,我收到错误error:cannotbind‘std::basi
C++11标准中变量“something”的类型是什么autosomething=nullptr;? 最佳答案 它的类型是std::nullptr_t,它是C++11中引入的单值类型,用于表示空指针,并且可以隐式转换为任何其他指针类型。 关于由nullptr初始化的C++11自动变量,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/20293632/
最近在学习C++11/14的auto特性。出于教育目的,我想明确显示我的代码的类型推断结果。我尝试了typeid().name(),但我发现这种方法有两个问题。输出有时难以理解。(例如,“NSt3__16vectorIiNS_9allocatorIiEEEE”)似乎没有显示const/volatile修饰符。@πìνταῥεῖ我试过使用你指出的abi::__cxa_demangle()。问题1解决了,谢谢,但是typeid().name()好像没有包含CV修饰符信息。我认为使用auto关键字有一些陷阱,所以我想看看类型推断的确切结果,包括CV修饰符和引用类型。我在macos10.10.
我想创建一个宏,将一对变量解包为两个局部变量。如果它只是一个变量,我不想创建该对的拷贝,这将完成:#defineUNPACK_PAIR(V1,V2,PAIR)\auto&V1=PAIR.first;\auto&V2=PAIR.second;UNPACK_PAIR(one,two,x);但是,我也希望它不要多次计算它给出的表达式,例如这应该只调用expensive_computation()一次:UNPACK_PAIR(one,two,expensive_computation());如果我这样做:#defineUNPACK_PAIR_A(V1,V2,PAIR)\autotmp=PAIR
我有如下程序:structA{inti;};intmain(){constinti=0;autoai=i;ai=2;//OKconstAbuf[2];for(auto&a:buf){a.i=1;//error!}std::cout第一个autoai=i;没有问题,好像auto没有检索c/v限定符,因为ai可以修改的但是for循环编译失败——错误:成员A::i在只读对象中的赋值我知道auto不会检索&功能,我的问题是:auto是否像我的情况一样检索c/v限定符?我的测试程序似乎给出了相互矛盾的提示。 最佳答案 你在这里复制ai,而不是
我正在阅读C++STL中auto_ptr的实现。我看到像->和*这样的指针上通常需要的操作被重载了,因此它们保留了相同的含义。但是,指针运算是否适用于自动指针?假设我有一个自动指针数组,我希望能够执行类似array+1的操作,并希望获得数组第二个元素的地址。我如何获得它?我对这个要求没有任何实际应用,只是出于好奇。 最佳答案 auto_ptr只能指向单个元素,因为它使用delete(而不是delete[])来删除它的指针。所以这里没有用到指针运算。如果您需要一个对象数组,通常的建议是改用std::vector。
我正在运行下面的代码来检查data_timestamp是否超过两周。如果是两周大,则打印hello否则打印world。我是一名Java开发人员,最近开始使用C++。在互联网上学到了一些东西,所以我在这个程序中使用它。#include#include#includeintmain(){//thishastobeuint64_tbcozofoldcodeuint64_tdata_timestamp=1406066507000;constautonow=std::chrono::system_clock::now();autotwoWeeks=std::chrono::hours(24*14
我在类似于以下的代码(一个Qt5项目)中启用了C++14:autofunc=[&](autop,autopp){if(!p)return;pp=p;p->init();this->member_function(pp->thing());//replacesmember_function(pp->thing());};MyClass*p1;...func(p1,m_p);m_p->doSomething();收到后:internalcompilererror:Segmentationfault调试我发现m_p在调用func后没有改变,正如我所期望的那样。泛型lambda(auto)真的