草庐IT

lexical_cast

全部标签

kotlin - 编译错误 : Smart cast to '<type>' is impossible,,因为 '<variable>' 是一个局部变量,由变化的闭包捕获

为了简化我的实际用例,假设我想在一个列表中找到最大的数字:varmax:Int?=nulllistOf(1,2,3).forEach{if(max==null||it>max){max=it}}但是,编译失败并出现以下错误:Smartcastto'Int'isimpossible,because'max'isalocalvariablethatiscapturedbyachangingclosure为什么更改闭包会阻止智能转换在此示例中工作? 最佳答案 通常,当在lambda函数闭包中捕获可变变量时,智能转换不适用于该变量,无论是在

c++ - dynamic_cast<void*> 什么时候有用?

这个问题在这里已经有了答案:Aretherepracticalusesfordynamic-castingtovoidpointer?(7个回答)关闭8年前。5.2.7/7大致如下:IfTis"pointertocvvoid",theresultisapointertothemostderivedclasspointedtobyx.这种语法有什么好的应用?什么时候应该dynamic_cast有用吗? 最佳答案 一个常见的原因是要弄清楚两个接口(interface)IA*和IB*实际上是否指向同一个底层对象。如果需要,请使用类型转换。

C++ 类型转换。 static_cast 什么时候会成功,而 reinterpret_cast 会导致问题?

我知道static_cast是从一种类型到另一种类型的转换,(直观地)是一种在某些情况下可以成功并且在没有危险转换的情况下有意义的转换。同时,reinterpret_cast是表示不安全转换的强制转换,可能会将一个值的位重新解释为另一个值的位。有人能描述一下代码编译、转换和static_cast不会导致问题,但使用reinterpret_cast会出现问题的场景吗? 最佳答案 这样就可以了:#includeusingnamespacestd;structC{intn;};structA{intn;};structB:A,C{};in

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++ - 来自 "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位字节