草庐IT

c++ - 如何使用 type_info 进行类型转换?

我存储了一个指向type_info对象的指针。intMyVariable=123;conststd::type_info*Datatype=&typeid(MyVariable);我如何使用它来将另一个变量类型转换为该类型?我试过这个,但它不起作用:std::cout使用类型转换的函数形式也不起作用:std::cout 最佳答案 很简单,您不能使用type_info来做到这一点。此外,在您的示例中,DataType不是类型,它是指向type_info类型对象的指针。你不能用它来转换。转换需要类型,而不是指针或对象!在C++0x中,您

c++ - 摆脱错误 C2243

是否有可能摆脱errorC2243?classB{};classD:protectedB{};Dd;B*p=&d;//conversionfrom'D*'to'B&'exists,butisinaccessible我在我的应用程序中遇到了这个错误,最后我通过显式转换设法编译了它:Dd;B*p=(B*)&d;我不明白为什么通过使D类继承自Bprotected而使隐式转换不可访问。我试图通过在类D中创建一个运算符B()来避免显式转换,以使转换易于访问:classB{};classD:protectedB{public:operatorB(){return*this;}};但是没有办法。还有

c++ - static_cast 可以在 C++ 中抛出异常吗?

假设static_cast永远不会抛出异常是否安全?对于int到Enum的转换,即使无效也不会抛出异常。我可以依赖这种行为吗?以下代码有效。enumanimal{CAT=1,DOG=2};inty=10;animalx=static_cast(y); 最佳答案 对于这种特定类型的转换(枚举类型的组成部分),可能会抛出异常。C++standard5.2.9Staticcast[expr.static.cast]paragraph7Avalueofintegralorenumerationtypecanbeexplicitlyconve

安全整数转换的 C++ 模板

我正在尝试编写一个C++模板函数,它将在不同整数类型、不同宽度和可能的有符号/无符号不匹配之间的转换中的整数溢出时抛出运行时异常。出于这些目的,我不关心从浮点类型到整数类型的转换,也不关心其他对象到对象的转换。我想这样做而不必编写大量特殊情况代码。这是我目前拥有的:templatevoidsafe_cast(constT&source,R&result){//getthemaximumsafevalueoftypeRRrMax=(R)~0;if(rMax(source);}这是否正确且有效?编辑:出于各种原因,STL不可用,所以我不能使用std::numeric_limits,而来自B

c++ - C++显式转换真的那么糟糕吗?

此时我对C++的了解比其他任何知识都更学术。在我迄今为止的所有阅读中,显式转换与命名转换的使用(const_cast、static_cast、reinterpret_cast、dynamic_cast)带有一个很大的警告标签(很容易看出原因),暗示显式转换是不良设计的症状,只能在绝望的情况下作为最后的手段使用。所以,我不得不问:使用命名强制转换的显式转换真的只是陪审团操纵代码,还是对此功能有更优雅和积极的应用?后者有一个很好的例子吗? 最佳答案 有些情况下您离不开它。喜欢thisone.问题是你有多重继承,需要将this指针转换为v

c++ - 为什么不使用私有(private)基地的类型转换运营商?

在此代码中,分配给b1有效,但它不允许分配给b2(有或没有静态转换)。我实际上是在尝试解决相反的问题,公共(public)继承但不隐式转换为基础。但是,似乎从未使用过cast运算符。这是为什么?structB{};structD1:privateB{operatorB&(){return*this;}B&getB(){return*this;}};structD2:publicB{explicitoperatorB&(){return*this;}};structD3:publicB{operatorB&()=delete;};voidfunB(B&b){}intmain(){D1d1

c++ - const_cast 与 static_cast

添加const到非常量对象,哪个是首选方法?const_cast或static_cast.在最近的一个问题中,有人提到他们更喜欢使用static_cast,但我会认为const_cast将使代码的意图更加清晰。那么使用static_cast的理由是什么?使变量成为常量? 最佳答案 也不要使用。初始化引用对象的const引用:Tx;constT&xref(x);x.f();//callsnon-constoverloadxref.f();//callsconstoverload或者,使用implicit_cast函数模板,例如theo

c++ - C++ 中的 dynamic_cast 开销

我知道dynamic_cast有运行时检查,因此考虑更安全(可以在失败时返回空指针)但比static_cast慢。但是两者之间的开销有多糟糕?我真的应该考虑在循环中使用static_cast来解决常规大型项目中的性能问题吗?或者差异很小,只与特殊的实时程序有关。 最佳答案 你分析过它吗?规则是:当您知道目标类型有效时使用static_cast。当您不确定时使用dynamic_cast,并且您需要程序为您查找对象的运行时类型。就这么简单。所有其他考虑因素都是次要的。 关于c++-C++中的

c++ - 在 C 中类型转换为 unsigned

inta=-534;unsignedintb=(unsignedint)a;printf("%d,%d",a,b);打印-534,-534为什么没有进行类型转换?我预计它是-534,534如果我修改代码为inta=-534;unsignedintb=(unsignedint)a;if(a它不打印任何东西...毕竟a小于b?? 最佳答案 因为您使用%d进行打印。使用%u表示未签名。由于printf是一个可变参数函数,它无法知道参数的类型,而必须依赖于格式说明符。因此,您所做的类型转换没有任何效果。

c++ - 这是 Actor 还是建筑?

看了教科书上的一些东西后,我有点困惑。关于代码:voiddoSomeWork(constWidget&w){//Funstuff.}doSomeWork(Widget(15));doSomeWork()接受一个constWidget&参数。教科书EffectiveC++III指出,这将创建一个临时Widget对象以传递给doSomeWork。它说这可以替换为:doSomeWork(static_cast(15));因为两个版本都是强制转换-第一个显然只是函数式C强制转换。不过,我原以为Widget(15)会为采用一个整数参数的小部件调用构造函数。在这种情况下会执行构造函数吗?