草庐IT

auto-correcting

全部标签

C++:auto 关键字 & 范围for

目录auto关键字:起源:  auto的使用细则:auto不能推导的场景:范围for:范围for的使用条件: C++的空指针:注意: auto关键字:起源: 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:类型难于拼写含义不明确导致容易出错例如:std::map::iterator于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。简单来说,auto可以从获取的数值中推导出我们想要得到的类型。intmain(){inti=0;int

c++ - 代码审查问题——我应该允许将 auto_ptr 作为参数传递吗?

考虑我最近在我们的代码库中看到的以下示例代码:voidClassA::ExportAnimation(auto_ptranimation){...doessomething}//callingmethod:voidclassB::someMethod(){auto_ptranimation(newCAnimation(1,2));ClassAclassAInstance;classAInstance.ExportAnimation(animation)...dosomemorestuff}我不喜欢这样——我宁愿这样写:voidClassA::ExportAnimation(CAnima

c++ - const-correctness的解释是什么?

我认为“const-correctness”的概念定义得很好,但当我和其他人谈论它时,我们似乎对它的含义有不同的看法。有人说这是关于一个程序在尽可能多的地方都有“const”注释。其他人将程序定义为const-correct当且仅当在使用const注释的地方没有违反constness时(即,它是编译器为您检查的属性)。所以我想知道,这些函数中哪些是const正确的:structPerson{stringgetName1()const{return_name;}stringgetName2(){return_name;}stringgetName3()const{_name="John"

c++ - 如何显式查看auto类型推断的结果?

最近在学习C++11/14的auto特性。出于教育目的,我想明确显示我的代码的类型推断结果。我尝试了typeid().name(),但我发现这种方法有两个问题。输出有时难以理解。(例如,“NSt3__16vectorIiNS_9allocatorIiEEEE”)似乎没有显示const/volatile修饰符。@πìνταῥεῖ我试过使用你指出的abi::__cxa_demangle()。问题1解决了,谢谢,但是typeid().name()好像没有包含CV修饰符信息。我认为使用auto关键字有一些陷阱,所以我想看看类型推断的确切结果,包括CV修饰符和引用类型。我在macos10.10.

C++11: "auto"关键字是否完全检索 cv 限定符?我有矛盾的样本

我有如下程序: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++ - C++中auto_ptr的指针运算

我正在阅读C++STL中auto_ptr的实现。我看到像->和*这样的指针上通常需要的操作被重载了,因此它们保留了相同的含义。但是,指针运算是否适用于自动指针?假设我有一个自动指针数组,我希望能够执行类似array+1的操作,并希望获得数组第二个元素的地址。我如何获得它?我对这个要求没有任何实际应用,只是出于好奇。 最佳答案 auto_ptr只能指向单个元素,因为它使用delete(而不是delete[])来删除它的指针。所以这里没有用到指针运算。如果您需要一个对象数组,通常的建议是改用std::vector。

c++ - 警告 : function uses 'auto' type specifier without trailing return type

下面的代码给出了下面的警告。有人可以解释原因吗(请注意代码没有用,因为我用int替换了我的类型来制作一个完整的示例)。警告:“MaxEventSize()”函数使用“auto”类型说明符而没有尾随返回类型[默认启用]想法是获取特定结构的最大大小(类型位于int所在的位置)。templateconstexprTcexMax(Ta,Tb){return(a 最佳答案 auto返回类型“没有尾随返回类型”是C++14的一个特性,所以我想你正在编译C++11。您的代码适用于C++14,但对于C++11,如果您想使用auto作为返回类型,您需

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录1->引用1.1->引用概念1.2->引用特性 1.3->常引用1.4->使用场景1.5->传值、传引用效率比较1.6->值和引用作为返回值类型的性能比较1.7->引用和指针的区别2->内联函数2.1->概念2.2->特性3->auto关键字(C++11)3.1->类型别名思考3.2->auto简介3.3->auto的使用细则3.4->auto不能推导的场景4->基于范围的for循环(C++11)4.1->范围for的语法4.2->范围for的使用条件5->指针空值nullptr(C++11)5.1->C++98中的指针空值1->引用1.1->引用概念引用不是新定义一个变量,而是给已经存在

c++ - VS2012 错误 : The application was unable to start correctly (0xc000007b)

在尝试运行我在VisualStudio2012中构建的C++SFML32位程序的exe文件后,我收到错误“应用程序无法正确启动(0xc000007b)”。我在我的项目中静态链接了SFMLdll,但将以下dll与我的程序结合在一起:libsndfile-1.dllopenal32.dllmsvcp110.dllmsvcp110d.dllmsvcr110.dllmsvcr110d.dll问题是什么? 最佳答案 您遇到的实际错误代码是0xC000007B。那就是NTSTATUS错误代码STATUS_INVALID_IMAGE_FORMAT

c++ - 错误 : ‘i’ does not name a type with auto

这个问题在这里已经有了答案:HowdoIenableC++11ingcc?(4个答案)关闭7年前。我是C++新手,这是我的程序#include#include#include#include#includeintmain(){staticconstdoublearr[]={16.0,2.2,77.5,29.0,24.0};std::vectorvec(arr,arr+sizeof(arr)/sizeof(arr[0]));std::transform(vec.begin(),vec.end(),vec.begin(),bind2nd(std::minus(),3.0));for(aut