草庐IT

static_casting

全部标签

c++ - Qt 5 : const char * QString cast

在Qt4中,可以自动将QString转换为“constchar*”,例如我可以将QString传递给需要“constchar*”的函数。voidmyFunction(constchar*parameter);QStringmyString;myFunction(myString);//worksinQT4然而,在Qt5中,我会收到“错误C2440:‘typecast’:无法从‘QString’转换为‘constchar*’”(这是VisualC++2008编译器,其他编译器会抛出类似的东西)。如果我对文档的理解正确,那是因为QT5中不再包含Qt3兼容层。当然,我可以更改函数调用myFu

c++ - boost::lexical_cast 和 double——奇怪的行为

为什么当我写"2.01"和"2.02"时,下面的代码会给我不同的结果?#include#include#includeintmain(){conststd::stringstr="2.02";try{constdoubleb=boost::lexical_cast(str)*100.0;std::cout(b);std::cout输出double:202int:202但是如果我将"2.02"更改为"2.01"它会给我以下输出:double:201badlexicalcast:sourcetypevaluecouldnotbeinterpretedastarget为什么?我正在使用Vis

c++ - inline static auto 的 Initializer "sizeof(T)"...是否需要实例化?

如果表达式的类型不相关,但我们用它来初始化静态自动变量,会发生什么?GCC和Clang的行为不同templatestructA{staticinlineautox=sizeof(T{}.f);};Aa;GCC不会引发错误。但是Clang认为这是无效的,因为它实例化了“sizeof”的操作数。GCC似乎跳过了该步骤,因为sizeof(T{}.f)始终具有类型size_t(不依赖于类型),因此它已经知道x没有实例化。如果我们引用x,例如(void)a.x;,两个编译器都会拒绝该程序。它甚至必须解析x的类型吗?如果我没记错的话,C++14以上的语言允许使用“占位符类型”保留事物(如函数)并进

c++ - 将 lexical_cast 字符串提升为两倍

我遇到了转换问题,希望得到您的帮助。我正在使用gcc4编译器,但我对gcc4的使用非常有限。我想将std::string转换为double。std::stringaQuantity=aRate.getQuantity();std::stringaAmount=aRate.getAmount();//aAmount="22.05"doubledQuantity=boost::lexical_cast(aQuantity);doubledAmount=boost::lexical_cast(aAmount);//dAmount=22.050000000000001顺便说一句,我也试过ato

c++ - reinterpret_cast 右值和优化

我正在将一堆代码转换为使用C++风格的转换(在-Wold-style-cast的帮助下)。我并不完全相信它对原始变量的使用,但总的来说我是C++风格转换的新手。一个问题发生在一些字节序转换代码中。当前代码如下所示:#defineREINTERPRET_VARIABLE(VAR,TYPE)(*((TYPE*)(&VAR)))//...uint16_treverse(uint16_tval){/*stufftoreverseuint16_t*/}int16_treverse(int16_tval){uint16_ttemp=reverse(REINTERPRET_VARIABLE(val,

c++ - "static initialization order fiasco"是 constexpr 变量的关注点吗?

如果我在一个翻译单元中用非默认值初始化一个constexpr变量foo然后初始化另一个constexpr变量bar和foo在另一个翻译单元中bar是否有可能在foo之前初始化导致bar由零或默认初始化的foo初始化。即,与非constexpr情况(静态初始化顺序惨败生效)不同,编译器和链接器会分析依赖顺序以保证正确的结果吗?此外,constexpr变量模板如何受到影响?它们的初始化顺序在单个翻译单元内未定义。首选C++17标准答案。更新:这是一个最小的例子。有用;那就是问题所在。在这一点上,我99%确定这是安全的TheStaticInitializationOrderFiasco(TS

c++ - dynamic_cast 返回 NULL 但它不应该

我有以下类层次结构:classIStorage{[...]}Q_DECLARE_INTERFACE(IStorage,"ch.gorrion.smssender.IStorage/1.0")classISQLiteStorage:publicIStorage{Q_INTERFACES(IStorage)[...]}Q_DECLARE_INTERFACE(ISQLiteStorage,"ch.gorrion.smssender.ISQLiteStorage/1.0")classDASQLiteStorage:publicQObject,publicISQLiteStorage{Q_OBJ

c++ - Casting - 为什么我应该为 Upcasting 做这件事

我一直在阅读该站点上的其他一些主题,他们提到了dynamic_cast和static_cast是如何安全地进行向上转换的。为什么向上转换甚至需要这些?例如,如果类B派生自A,则A*ptr=newB();仍然有效,并且表现得像A类型的对象。(我也来自Java背景,其中不需要进行向上转换的转换。我还在这个网站上读到,向下转换不需要dynamic_cast[有问题的“Whenshouldstatic_cast,dynamic_cast,const_castandreinterpret_castbeused?”].同样,我认为只有在向下转型时才真正需要转型,因为向上转型是自动发生的。我哪里错了

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一

c++ - 避免 dynamic_cast 缓慢的著名解决方案?

我需要运行时多态性,所以我使用了dynamic_cast.但现在我有两个问题--dynamic_cast非常慢!(向下滚动基准。)长话短说,我最终以这种方式解决了问题,使用static_cast:structBase{virtual~Base(){}virtualinttype_id()const=0;templateT*as(){returnthis->type_id()==T::ID?static_cast(this):0;}templateTconst*as()const{returnthis->type_id()==T::ID?static_cast(this):0;}};st