草庐IT

c++ - reinterpret_cast 什么时候修改位?

来自C++标准:5.2.10.3Themappingperformedbyreinterpret_castmight,ormightnot,producearepresentationdifferentfromtheoriginalvalue.我在这个网站接受过培训,相信并重复这一点。(即使可能只是琐事)。从float*到int*的reinterpret_cast被允许产生不同的位模式。唯一的保证是reinterpret_cast将结果返回到float*将产生原始位模式。我的问题:这会发生吗?是否存在实际reinterpret_cast为不同位模式的现有真实平台或CPU或编译器?如果不

C++ 隐式转换运算符优先级

编辑:根据MikeSeymour的评论,我将operatorstd::string()const;替换为operatorchar*()const;并相应地更改了实现。这允许隐式转换,但是,出于某种原因,unsignedlongint运算符优先于char*运算符,这感觉不对......另外,我不想在类,当我有std::string时。我有一种预感,我的CustomizedInt类需要继承一些东西才能支持我想要的功能。有人可以详细说明Mike关于std::basic_string的评论吗?我不确定我是否理解正确。我有这段代码:#include#include#includeclassCus

c++ - 检查(原始)类型在 C++ 中是否可转换

是否可以检查(在C++中)类型是否可转换(隐式或显式)?std中是否有内容,或者是否可以像C#(C#sameQuestion)中那样编写一个函数?我想对类型而不是类型的实例执行此检查。我不确定C++中的类型系统。C#或Java中有类似Type类的东西吗?typeid(int)是我找到的最近的。我可以将类型存储到变量吗?仔细阅读提示将不胜感激。例如:boolisCastable(false);boolwithoutLoss(true);isCastable=isCastableFromTo(typeid(int),typeid(__int64),withoutLoss);//trueis

c++ - reinterpret_cast 更改指针值的任何真实示例?

根据C++标准,指针T*到其他类型指针Q*的reinterpret_castcanchangeornotchangethepointervalue取决于实现。我非常感兴趣-是否有任何真实的C++实现示例,其中使用reinterpret_cast将指针转换为其他指针类型会更改指针?那里发生了什么变化以及为什么发生变化? 最佳答案 请注意,当标准声明它可以或不能做某事时,并不意味着当前有任何实现具有该行为,只是它们可以。我能想到的最接近的是硬件要求类型对齐的架构,以及决定在需要时纠正对齐的实现。像这样的东西:aligned8var;al

c++ - 从大 double 静态转换为整数时的奇怪行为

这是我的简单代码:intmain(){doubled1=10000000000.0;constdoubled2=10000000000.0;cout(d1)(d2)(10000000000.0)输出是:-214748364821474836472147483647这让我大吃一惊。为什么正double有时会转换为负整数?我正在使用g++:GCC版本4.4.3(Ubuntu4.4.3-4ubuntu5)。 最佳答案 当int不足以容纳值时,将double转换为int会产生未定义的行为.[n3290:4.9/1]:Aprvalueofaf

C++:将父类转换为子类

我是C++的新手,这是我遇到的问题:我有两个类,Client和Host。加载所有内容后,您可以选择按下两个按钮,如果按下按钮1,则加载Client,如果按下按钮2,则加载Host。现在Client和Host都是相当大的类,我不想把它们都放到内存中。所以我的想法是创建一个Base类,然后Client和Host都应该扩展基类,然后我唯一要做的就是这样做是这样的:Baseconnection;//Ifbutton1ispressed:connection=Client();//Ifbutton2ispressed:connection=Host();好吧,这听起来好得令人难以置信,而且当我尝

c++ - 指针除了存地址,怎么实现呢?

最近我回答了anotherquestionaskingforquestionseverydecentC++programmershouldbeabletoanswer.Mysuggestion是Q:Howdoesapointerpointtoanobject?A:Thepointerstorestheaddressofthatobject.但是userR..不同意我向Q提出的A-他说正确的答案是“它是特定于实现的”。虽然当前的实现将数字地址存储为指针,但没有理由不将其设计得更加精细。当然,除了为了不同意而存储地址之外,可能还有其他实现,我不能不同意。我真的很感兴趣还有哪些其他真正使用过

c++ - 类型转换指针和三元? : operator. 我是重新发明了轮子吗?

此代码的最后一行无法使用castingAndTernary.cpp:15进行编译:错误:不同指针类型“D1*”和“D2*”之间的条件表达式缺少强制转换一个真正聪明的编译器可能没有任何困难,因为两者都可以安全地转换为B*(基类)。我不愿意使用static_cast和dynamic_cast等等——我担心有一天我会混淆这些类并得到未定义的行为。这就是我创建up_cast模板的原因。该模板在允许的转换方面做了最低限度的工作。有更简单的方法吗?还有其他解决方法,但我不禁想到我可以使用更简单、更安全的方法吗?structB{};structD1:publicB{};structD2:public

c++ - 带有 const 指针的 boost::dynamic_pointer_cast 不起作用?

假设我有两个类,A和B,其中B是A的子类。我还有以下功能:voidfoo(boost::shared_ptra){boost::shared_ptrb=boost::dynamic_pointer_cast(a);//Error!}用gcc编译会出现以下错误:C:\Boost\include/boost/smart_ptr/shared_ptr.hpp:Inconstructor'boost::shared_ptr>::shared_ptr(constboost::shared_ptr&,boost::detail::dynamic_cast_tag)[withY=constA,T=c

c++ - 从 void* 到基类指针的转换

我有一些层次结构:基类、派生类和一些将用户数据存储为void*的结构。该void可以存储Base和Derived类指针。主要问题是我不知道那里存储的是基指针还是派生指针。classBase{public:inttype;};classDerived:publicBase{};Base*base;//initbasepointerDerived*derived;//initderivedpointervoid*base_v=base;void*derived_v=derived;//voidpointersarecorrect.Theypointtobaseandderivedvaria