草庐IT

Implicit_cast

全部标签

c++ - 错误 : cannot dynamic_cast . ..(目标不是指针或引用)

我正在学习C++中的异常处理并遇到了问题。这是代码:#include#includeusingnamespacestd;classA{public:virtualvoidf(void){}};classAA:publicA{public:voidaa(void){};};intmain(void){Aa;try{dynamic_cast(a).aa();}catch(exceptionex){cout所以我以为trycatch会让函数执行并告诉我异常的内容,但是我的编译器没有编译它。我在GNUGCC中使用代码块。请帮助我并告诉我我需要做什么才能让代码按预期运行。非常感谢。

c++ - 在没有 const_cast 的情况下修改 *this 的 const 方法

我正在编写的程序中出现了以下模式。我希望它不是太做作,但它设法改变了Fooconst方法中的对象Foo::Questionable()const,不使用任何const_cast或类似的。基本上,Foo存储对FooOwner的引用反之亦然,在Questionable(),Foo设法通过调用mutate_foo()在const方法中修改自身在它的主人身上。问题遵循代码。#include"stdafx.h"#includeusingnamespacestd;classFooOwner;classFoo{FooOwner&owner;intdata;public:Foo(FooOwner&ow

c++ - 每次我想在基本类型之间进行转换时,我真的应该使用 static_cast 吗?

这是什么原因longl=1;charc=static_cast(l);floatf=1.0f;inti=static_cast(f);比这更好longl=1;charc=(char)l;floatf=1.0f;inti=(int)f;当将一种原始数据类型转换为另一种时?我有很多在类似情况下使用第二种样式进行类型转换的遗留代码,所以这也是一个关于我是否应该对该代码进行全面修订的问题。 最佳答案 面向future。假设将来我这样做:floatblah=1.0f;float*f=&blah;现在,inti=static_cast(f);停

c++ - 为什么使用 static_cast<int>(x) 而不是 (int)x?

我听说static_cast函数应该比C风格或简单函数风格的转换更受欢迎。这是真的?为什么? 最佳答案 主要原因是经典的C转换不区分我们所说的static_cast()。,reinterpret_cast(),const_cast(),和dynamic_cast().这四件事完全不同。Astatic_cast()通常是安全的。语言中有一个有效的转换,或者一个适当的构造函数使它成为可能。唯一有点冒险的时候是当你向下转换到一个继承的类时;您必须通过语言外部的方式(如对象中的标志)确保该对象实际上是您声称的后代。dynamic_cast(

c++ - Clang 问题 : implicit type conversion at construction time

概要我正在努力使C++11代码与Clang兼容,并遇到了GCC>=4.6接受代码而Clang>=3.1不接受的情况。Clang认为候选构造函数不可行。详情这里是一个精简的例子来说明这个问题:#includetemplatestructT;templatestructT{typedefTsuper;constexprT(){}templateT(Args&&...){}};templatestructT:T{typedefTsuper;Headhead;T(Headarg):super(),head(std::move(arg)){}};structvoid_type{constexpr

c++ - 通过 const_cast 修改 const std::vector<T> 的元素

下面的程序是否有未定义的行为?#include#includestructFoo{conststd::vectorx;};intmain(){std::vectorv={1,2,3};autof=newFoo{v};const_cast(f->x[1])=42;//Legal?std::coutx[1]请注意,它不是使用const_cast从f->x中剥离常量,而是从f->中剥离常量x[x],大概由一个单独的数组表示。或者是否允许翻译假定f->x[1]在创建后是不可变的? 最佳答案 您的示例中没有未定义的行为。上面的代码不会调用未定

c++ - 在未对齐的内存上重新解释_cast

假设以下代码:structA{inta;intb;};char*buffer=receivedFromSomeWhere();Aa=*reinterpret_cast(buffer+1);如果buffer+0在int的大小上对齐,buffer+1很可能在未对齐的内存上。默认复制构造函数可能会愉快地复制两个未对齐的int成员a和b。在x86/x64架构上,除了减慢代码速度外,它是否会以任何讨厌的方式影响a的复制构造?我知道一个好的序列化可以解决未对齐的内存问题(通过在某处添加一个填充以使A结构在buffer中对齐),但就我而言,我不对这部分负责。 最佳答案

c++ - 当一个方法只接受 Foo *const 时,我应该 const_cast "this"吗?

我有一个类Foo这是一个self引用的树状结构(最低限度):classFoo{public://Getsthischild'spositionrelativetoit'sparent.intgetPosition()const{returnparent->indexOf(this);}intindexOf(constFoo*constchild)const{returnchildren.indexOf(child);//thislinecausesanerror.}private:Foo*parent;QListchildren;}行returnchildren.indexOf(chi

c++ - 转换函数是否返回 void "old-style-cast"?

Coverity提示我们代码库中的各种函数调用没有检查返回值。Uncheckedreturnvalue(CHECKED_RETURN)3.check_return:CallingAppendwithoutcheckingreturnvalue(asisdoneelsewhere73outof78times).在过去,我们会通过将返回值转换为void(如讨论的here)来简单地解决这个问题(在仔细检查返回值确实不重要之后):(void)Foo.Append(bar);但是,我们正朝着启用所有警告的方向努力,并且将警告视为错误,所以我有点担心上面的代码会生成一个old-style-cast

c++ - C++ Cast的实现

我正在浏览CodeProject中的一些代码,发现了以下用于C++转换的代码。templateunionhorrible_union{OutputClassout;InputClassin;};templateinlineOutputClasshorrible_cast(constInputClassinput){horrible_unionu;u.in=input;returnu.out;}为什么要按上面的方式实现cast。为什么我们不能只进行手动转换。有人可以举例说明正常类型转换何时不起作用吗? 最佳答案 尽管这种方法依赖于未定