草庐IT

Implicit_cast

全部标签

c++ - boost::lexical_cast 对于 c++11 stoi、stof 和 family 是否是多余的?

既然C++11引入了stoi,stof,boost::lexical_cast是多余的吗?和家人,还是有任何理由仍然使用它?(除了没有C++11编译器)它们提供完全相同的功能吗? 最佳答案 boost::lexical_cast句柄morekindsofconversion,包括迭代器对、数组、C字符串等。提供相同的通用接口(interface)(sto*对不同的类型有不同的名称)是区域敏感的(sto*/to_string只是部分,例如lexical_cast可以处理数千个分隔符,而stoul通常不会)

c++ - 如何使用 const_cast?

我的Student类中有一个私有(private)变量,定义为:constintstudentNumnber;我正在尝试为Student编写一个复制构造函数,并且我需要抛弃constness来执行此操作。不幸的是,我不明白如何使用std::const_cast。这就是我在复制构造函数中尝试做的事情:Student(constStudent&s):Person(p.getName(),p.getEmailAddress(),p.getBirthDate()),school(0),studentNumber(0){school=newchar[strlen(s.school)+1];str

c++ - static_cast<T>(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

我在一个无法访问C++标准库的环境中编写C++代码,特别是无法访问std::numeric_limits.假设我要实现templateconstexprTall_ones(/*...*/)专注于无符号整数类型,我该放什么?具体来说,是static_cast(-1)够好了?(根据我猜的大小,我可以将其他类型视为无符号字符数组。) 最佳答案 使用bitwiseNOT接线员~在0.TallOnes=~(T)0;一个static_cast(-1)假定二进制补码,这是不可移植的。如果您只关心无符号类型,hvd'sanswer是要走的路。工作示

c++ - "Implicit instantiation of undefined template"前向声明模板类时

我有一些代码需要在其中前向声明一个模板类(或者至少,前向声明对我来说会让事情变得更容易......)。我已经编写了我遇到的问题的简化版本,所以我可以在这里显示它:templateclassMyTemplateClass;intmain(intargc,char*argv[]){MyTemplateClassmyTemp;//errorheremyTemp.GetTheValue();return0;}templateclassMyTemplateClass{intm_myint;floatm_myfloat;public:MyTemplateClass():m_myint(5),m_m

c++ - 来自 "void *"的 dynamic_cast

根据this,void*没有RTTI信息,因此从void*进行强制转换是不合法的,并且有意义。如果我没记错的话,来自void*的dynamic_cast正在研究gcc。你能澄清一下这个问题吗? 最佳答案 dynamic_cast仅适用于多态类型,即包含虚函数的类。在gcc中,您可以dynamic_casttovoid*但不能from:structS{virtual~S(){}};intmain(){S*p=newS();void*v=dynamic_cast(p);S*p1=dynamic_cast(v);//givesanerro

c++ - 通过 void* 进行转换,而不是使用 reinterpret_cast

这个问题在这里已经有了答案:ShouldIusestatic_castorreinterpret_castwhencastingavoid*towhatever(8个回答)关闭去年。我在看书,发现reinterpret_cast不应该直接使用,而是结合static_cast强制转换为void*:T1*p1=...void*pv=p1;T2*p2=static_cast(pv);代替:T1*p1=...T2*p2=reinterpret_cast(p1);但是,我找不到解释为什么这比直接转换更好。如果有人能给我解释或指出答案,我将不胜感激。提前致谢附言我知道reinterpret_cas

c++ - dynamic_cast的实际使用?

我有一个关于dynamic_cast运算符的非常简单的问题。我知道这用于运行时类型识别,即在运行时了解对象类型。但是根据您的编程经验,您能否给出一个必须使用此运算符的真实场景?不使用有什么困难? 最佳答案 玩具示例诺亚方舟应作为不同类型动物的容器。由于方舟本身并不关心猴子、企鹅和蚊子之间的区别,所以你定义了一个类Animal,派生类Monkey,Penguin,和Mosquito从它,并将它们中的每一个存储为Animal在方舟里。一旦洪水结束,诺亚想将动物分布在地球上它们所属的地方,因此需要更多关于储存在他方舟中的通用动物的知识。例

c++ - char* 和 std::uint8_t* 之间的 reinterpret_cast - 安全吗?

现在我们有时都必须使用二进制数据。在C++中,我们使用字节序列,并且从一开始char是我们的基石。定义为sizeof1,它是字节。并且所有库I/O函数都使用char默认。一切都很好,但总有一点问题,一些奇怪的问题困扰了一些人-一个字节中的位数是实现定义的。所以在C99中,决定引入几个typedef来让开发人员轻松表达自己,固定宽度的整数类型。当然是可选的,因为我们不想损害可移植性。其中,uint8_t,作为std::uint8_t迁移到C++11,一个固定宽度的8位无符号整数类型,对于真正想要使用8位字节的人来说是完美的选择。因此,开发人员接受了新工具并开始构建明确声明他们接受8位字节

c++ - 错误 : cast from 'void*' to 'int' loses precision

我有一个带有原型(prototype)void*myFcn(void*arg)的函数,它用作pthread的起点。我需要将参数转换为int以供以后使用:intx=(int)arg;编译器(GCC版本4.2.4)返回错误:file.cpp:233:error:castfrom'void*'to'int'losesprecision转换这个的正确方法是什么? 最佳答案 您可以将其转换为intptr_t类型。这是一个int类型保证足够大以包含指针。使用#include来定义它。 关于c++-错

c++ - 将 NULL/0 传递给 dynamic_cast 的便携安全?

出于检查空指针的习惯,我有时会写:MyClass*c=someBasePtr?dynamic_cast(someBasePtr):0;if(c){...实际上,在传递给动态转换之前检查空指针,并检查返回。然后我阅读了MSDN文档Anullpointervalueisconvertedtothenullpointervalueofthedestinationtypebydynamic_cast.看来我可以安全地删除?:构造。这是C++便携吗?这样新的代码会是MyClass*c=dynamic_cast(someBasePtr);if(c){...当然假设someBasePtr为null或