草庐IT

Implicit_cast

全部标签

c++ - duration_cast 怎么轮

如果我转换为更粗略的时间单位(例如std::chrono::minutes为std::chrono::hours),duration_cast将如何圆?例如,如果转换为std::chrono::hours,std::chrono::minutes(91)会变成什么值?2小时,1小时? 最佳答案 duration_cast总是向零舍入。IE。正值向下舍入,负值向上舍入。有关其他舍入选项,请参阅:http://howardhinnant.github.io/duration_io/chrono_util.htmlfloor、ceil和r

c++ - static_cast 转换构造函数 vs 转换运算符

这个问题在这里已经有了答案:Shouldn'tthiscodethrowanambiguousconversionerror?(1个回答)关闭6年前。看完this我尝试使用static_cast进行此类转换:classA;classB{public:B(){}B(constA&)//conversionconstructor{cout(a);return0;}我预计它不会编译,因为构造函数和运算符都具有相同的c-v资格。然而,它编译成功,static_cast调用构造函数而不是运算符。为什么?(使用带有pedantic和Wall标志的gcc4.8.1编译)

c++ - sibling 的 dynamic_cast 的用例是什么?

我正在阅读ScottMeyers的《更有效的C++》。教化!Item2提到dynamic_cast不仅可以用于向下转换,还可以用于兄弟转换。任何人都可以提供一个(合理的)非人为的例子来说明它对sibling的用法吗?这个愚蠢的测试按它应该打印0,但我无法想象任何用于此类转换的应用程序。#includeusingnamespacestd;classB{public:virtual~B(){}};classD1:publicB{};classD2:publicB{};intmain(){B*pb=newD1;D2*pd2=dynamic_cast(pb);cout

c++ - 使用 C++ 样式转换从 Void* 转换为 TYPE*​​ : static_cast or reinterpret_cast

因此,如果您从Void*转换为Type*或从Type*转换为Void*,您应该使用:voidfunc(void*p){Params*params=static_cast(p);}或voidfunc(void*p){Params*params=reinterpret_cast(p);}对我来说static_cast似乎更正确,但我已经看到两者用于同一目的。此外,转换的方向是否重要。即我是否仍应将static_cast用于:_beginthread(func,0,static_cast(params)我已经阅读了关于C++样式转换的其他问题,但我仍然不确定这种情况下正确的方法是什么(我认为

c++ - 从 Derived* 到 void* 到 Base* 的 static_cast

我想将指向派生类成员的指针转换为void*,然后从那里转换为基类的指针,如下例所示:#includeclassBase{public:voidfunction1(){std::cout(&d);Base*baseptr=static_cast(ptr);baseptr->function1();baseptr->function2();}这会编译并给出所需的结果(分别打印1和2),但它能保证工作吗?我在这里找到的static_cast的描述:http://en.cppreference.com/w/cpp/language/static_cast只提到转换为void*并返回到指向相同类

C++:Cast 运算符重载和引用

C++允许通过创建operatorT()来重载类型转换,其中T是我们要转换为的类型。现在,这个功能如何与引用一起发挥作用?例如:structY{inti;};structX{Yy;operatorY()const{returny;}};在这里,我们可以将X转换为Y,这将简单地返回包含的Y。但是,如果我们想转换为Y引用怎么办?例如,C++允许我们这样做:structX{Yy;operatorY&(){returny;}operatorconstY&()const{returny;}};现在,我们可以将X转换为Y引用或const引用(这也适用于constX)。第一个和第二个例子在语义上有什

c++ - 什么是 (void*) casting?

我确实尝试在StackOverflow上搜索此内容,但我认为由于语法原因以及不知道要搜索的确切内容,我有点不知所措。我见过(void*)被用来转换,通常是函数调用。这是做什么用的? 最佳答案 void*,通常称为void指针,是一种通用指针类型,可以指向任何类型的对象。指向不同类型对象的指针在内存中几乎相同,因此您可以使用void指针来避免类型检查,这在编写处理多种数据类型的函数时非常有用。空指针在C中比在C++中更有用。您通常应该避免使用void指针,而是使用函数重载或模板。类型检查是个好东西!

c++ - static_cast<T> 对 T& 做了什么?

所以我问了thisquestion我正在尝试通过static_cast解决它。(顺便说一句,它确实解决了问题,我只是不确定我是否理解为什么。)在代码中:vectorfoo={0,42,0,42,0,42};replace(begin(foo),end(foo),static_cast(foo.front()),13);static_cast是否只是构造一个R值int?那和只是打电话有什么区别:replace(begin(foo),end(foo),int{foo.front()},13);编辑:根据答案static_cast的推断,确实似乎构造了一个R值int:http://ideon

c++ - 为什么 const_cast 的行为不如预期?

structA{A(){}private:A(constA&);//Explicitlydisablethecopyconstructor.};intmain(){constAa1;//OK.Aa2;//OK.autoa3=const_cast(a1);//CompilererrorC2248!???}我的C++编译器是最新的VC++2013预览版。编译器提示最后一行错误C2248:'A::A':cannotaccessprivatememberdeclaredinclass'A'为什么const_cast的行为不如预期? 最佳答案

c++ - 为什么 memcpy 在解析二进制数据时比 reinterpret_cast 慢?

TLDR:我忘记启用编译器优化。启用优化后,性能(几乎)相同。原帖从二进制数据中读取整数时,我注意到memcpy比转换解决方案慢。版本1:reinterpret_cast,由于潜在的对齐问题而有异味,但也更快(?)intget_int_v1(constchar*data){return*reinterpret_cast(data);}版本2:memcpy,正确但速度稍慢:intget_int_v2(constchar*data){intresult;memcpy(&result,data,sizeof(result));returnresult;}我有abenchmarkonIdeon