草庐IT

auto_cast

全部标签

c++ - 引用 "auto"函数作为模板参数

这是重现问题的最小(C++14)代码:templatestructFoo{staticautovalue(){}};voidbar(){}templatestructFoo::value>;GNUC++“g++(Ubuntu5.1.0-0ubuntu11~14.04.1)5.1.0”编译器发出:error:couldnotconverttemplateargument‘Foo::value’to‘void(&)()’templatestructFoo::value>;^我注意到的第一个奇怪的事情是Foo::value—a未被替换,并且value不知何故变成了模板?以下无意义的修复强化了

【C++】 C++入门 — auto关键字

C++入门auto关键字1介绍2使用细则3注意事项Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!!auto关键字1介绍编程时常常需要把表达式的值赋给变量,这就要求在声明变量时清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时甚至做不到。如下:类型难于拼写含义不明确导致容易出错#include#includeintmain(){ std::mapstd::string,std::string>m{{"apple","苹果"}, {"orange","橙子"}, {"pear","梨"}}; std::mapstd::string,std::string>::iteratorit=m

c++ - dynamic_cast 何时因隐藏符号而失败?

根据关于可见性的gccwiki(https://gcc.gnu.org/wiki/Visibility,请参阅“C++异常问题(请阅读!)”)部分,但似乎也是一个示例(dynamic_castfailedwhenhidingsymbol),隐藏类可以导致有效的dynamic_cast失败。我想通过示例准确了解这种情况何时发生:任何人都可以给我一个小示例来正确理解效果吗?这是我的尝试和理解(在Linux上使用gcc>7):据我了解,我需要的是vaguelinkage发生,当基类没有关键方法时发生。所以我尝试了这个基本层次结构:classA{virtual~A();virtualvoidp

c++ - 这是 "new auto(enum_type)"的 Microsoft VC++ 2010 编译器错误吗

环境:MicrosoftVisualStudio2010withSP1Preminum(10.0.40219.1SP1Rel),WindowsXPSP3VC10编译器支持auto关键字,但推导的类型相关信息对于枚举似乎并不总是正确的。例子:#includeenumfruit_t{apple=100,banana=200,};intmain(){constautopa=newauto(banana);constautopb=newfruit_t(banana);static_assert(std::is_same::value,"notsame!");deletepb;deletepa;

C++关键词auto详解

顾得泉:个人主页个人专栏:《Linux操作系统》 《C++从入门到精通》  《LeedCode刷题》键盘敲烂,年薪百万!一、小思考           随着我们对于C++的不断学习,遇到的程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:        1.类型难于拼写        2.含义不明确导致容易出错举个栗子来说:#include#includeintmain(){std::mapm{{"apple","苹果"},{"orange","橙子"},{"pear","梨"}};std::map::iteratorit=m.begin();while(it!=m.end()){//

c++ - 什么时候允许编译器优化 auto+brace 样式初始化?

假设您有一个名为Product的类,定义如下:classProduct{public:Product(constchar*name,inti);Product(Product&&rhs);Product(constProduct&rhs);~Product();private:constchar*m_name;intm_i;};然后你像这样初始化一个变量:autop=Product{"abc",123};我认为标准规定编译器必须在逻辑上执行以下操作:构建一个临时产品移动构建p(使用临时Product)但是允许编译器对其进行优化,以便直接构造p。我验证了这一点(VisualStudio2

c++ - 避免使用 auto 关键字字面上重复 const 和非常量的代码?

好的,我做了一些研究,显然在这个主题上有很多重复的问题,仅举几例:Elegantsolutiontoduplicate,constandnon-const,getters?Howtoavoidoperator'sormethod'scodeduplicationforconstandnon-constobjects?HowdoIremovecodeduplicationbetweensimilarconstandnon-constmemberfunctions?等但我还是忍不住再次提出来,因为与c++14auto类型的返回值,我实际上是在复制函数体,唯一的区别是const函数限定符。c

c++ - 为什么这个来自Objective-C++的dynamic_cast调试成功但发布失败?

我在最新版本的Xcode(撰写本文时为9.4.1)中构建了一个C++框架,我再次在Xcode中从Objective-C++代码中使用它。我需要执行从一种指针类型到另一种指针类型的dynamic_cast。但是,dynamic_cast仅适用于调试版本,不适用于发布版本。关于dynamic_cast在Objective-C++中的工作方式,我是否缺少或理解导致此示例失败的某些内容?C++框架TestClass.hppclassParent{public://https://stackoverflow.com/a/8470002/3938401//musthaveatleast1virtu

c++ auto 不命名类型

我在我的代码中使用关键字auto137autoi=boost::find(adresses,adress);在使用以下命令编译时出现这些错误[vickey@tbtests]$clear;g++testCoverDownloader.cpp../CoverDownloader.cpp-I/usr/include/QtGui/-I/usr/include/QtCore/-lQtGui-lQtCore-std=c++0x../CoverDownloader.cpp:137:10:error:‘i’doesnotnameatype../CoverDownloader.cpp:139:8:err

c++ - static_cast 如何与虚拟继承一起使用?

因此不可能使用具有虚拟继承的static_cast进行向下转型,但是如何进行以下向上转型:classBase{...};classDerived:publicvirtualBase{...};...Derived*d=newDerived();Base*b=static_cast(d);对象的内存布局:[derivedpart|basepart]我知道向上转型被认为是“安全的”,但是当继承是虚拟的时,编译器如何在编译时知道基础子对象的偏移量?static_cast是否使用vtable?当我们有这样的东西(注意它不是虚拟的)时,这尤其令人困惑:classThird:publicDeriv