草庐IT

static_pointer_cast

全部标签

c++ - 是否所有 C++ 编译器都允许使用 static const int 类成员变量作为数组绑定(bind)?

在VC++中,当我需要为类成员变量指定一个数组绑定(bind)时,我会这样做:classClass{private:staticconstintnumberOfColors=16;COLORREFcolors[numberOfColors];};(请不要告诉我这里使用std::vector)这样我就有了一个常量,可以用作数组绑定(bind),稍后在类代码中指定循环语句约束,同时它在其他任何地方都不可见。问题是staticconstint成员变量的这种用法是否只被VC++允许,还是通常被其他广泛使用的编译器允许? 最佳答案 这是有效的

c++ - "function"类型的优点是什么(不是 "pointer to function")

阅读C++标准,我看到有“函数”类型和“函数指针”类型:typedefintfunc(int);//functiontypedefint(*pfunc)(int);//pointertofunctiontypedeffunc*pfunc;//sameasabove我从未见过在示例之外使用的函数类型(或者我可能没有意识到它们的用法?)。一些例子:funcincrease,decrease;//declarestwofunctionsintincrease(int),decrease(int);//sameasaboveintincrease(intx){returnx+1;}//cann

c++ - 当编译器看不到可以完成转换的可能类型时,是否允许编译器优化 volatile 指针的 dynamic_cast?

看看这个小片段:structA{virtual~A(){}};structB{};boolfn(){A*volatilea=newA;returndynamic_cast(a);}是否允许编译器完全删除dynamic_cast,并将dynamic_cast转换为简单的nullptr;?这个问题的原因是这个answer.注意事项:假定volatile意味着编译器不能假定任何有关a的信息,因为它是易变的。这是一个question为什么。dynamic_cast可能不允许被删除的事实是程序中某处可能有一个类型,它派生自A和B。 最佳答案

c++ - reinterpret_cast 可以更改对象表示吗?

我对reinterpret_cast的心理模型一直是,将表达式的位序列视为不同类型,并且cppreference(注意:这不是C++标准的引用)似乎同意这一点:Unlikestatic_cast,butlikeconst_cast,thereinterpret_castexpressiondoesnotcompiletoanyCPUinstructions.Itispurelyacompilerdirectivewhichinstructsthecompilertotreatthesequenceofbits(objectrepresentation)ofexpressionasifi

c++ - 通过 decltype 表达式调用时 static_assert 是否应该工作?

我预计以下代码会因最后一行的static_assert检查而失败。但是在MSVC2015和gcc6.2中,它编译成功。它确实无法按预期在clang3.9中进行编译。这是编译器错误还是static_assert在decltype()中不起作用?#include#includetemplatestructWrapper{};templateconstexprstd::tupleoperator|(Wrapper,Wrapper){static_assert(std::is_same::value==false,"can'tcombinetwoofthesametype");returnst

c++ - 我可以通过 reinterpret_cast 将 int 的空指针转换为 long 类型吗

int*pt=0;longi=reinterpret_cast(pt);我保证为0吗?这是明确定义的还是实现定义的?我检查了c++标准,但它只说明了Apointertoadataobjectortoafunction(butnotapointertomember)canbeconvertedtoanyintegertypelargeenoughtocontainit.在这种情况下,pt不指向任何数据对象。该规则适用于这种情况吗? 最佳答案 否,i不一定是任何值。结果是实现定义的。†在C++中,指针的表示是实现定义的,包括空指针的表示

c++ - 轻松地将许多重要的 "static library projects"重构为 "dll projects"

我有6个静态库项目:--Math-ECS:dependsonMath-Utility:dependsonECS-Physics:dependsonUtility-Graphics:dependsonUtility-BaseGame:dependsonPhysicsandGraphics-Somegame(.exe):dependsonBaseGame(The"depends"hereistransitivee.g.BaseGamealsodependsonECS.)我通过“静态库”技术成功地使用了6个项目。今天听说动态库可以减少编译时间(暂且不讨论是否属实),所以我阅读了以下链接并成功

c++ - 为什么我不能使用 static_cast<int&> 将整数引用参数传递给 C++ 中的函数?

我在C++程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取它。我首先将其声明为int,但在代码审查时被要求将其键入为枚举(ControlSource)。我这样做了,但它破坏了Get()函数——我注意到C风格的转换为int&解决了这个问题,但是当我第一次尝试用static_cast修复它时,它没有编译。为什么会这样,为什么当eTimeSource是一个int时根本不需要强制转换来通过引用传递整数?//GetCuePropertyValuesignatureis(intcueId,intpropertyId,int&value);ControlSourceeTimeSourc

c++ - 返回需要由智能指针持有的 'pointer'

我有一个项目,我想更多地使用智能指针。总的来说,我已经成功地实现了这个目标。但是,我遇到了一件事,我不确定“最佳做法”是什么。基本上我想从函数返回一个“指针”,但要求用户将它保存在一个智能指针中。不仅如此,我不想强​​制使用特定的智能指针(共享与作用域)。问题主要在于似乎没有将scoped_ptr升级为shared_ptr的正确方法(我认为这将是理想的解决方案)。我理解他们为什么不这样做,因为这将允许所有权转移,这可能会导致一些问题,例如std::auto_ptr。但是,转让所有权对于这个案例来说似乎是个好主意。所以我的想法是这样的://contrivedexampleoffactor

c++ - 我可以在类定义中放置 "non-static blocks"代码吗?

C++中有非静态block吗?如果不是,如何优雅地模拟?我想替换像这样的东西:-classC{public:voidini(){/*somecode*/}};classD{std::vectorregis;//willini();laterpublic:Cfield1;public:Cfield2;public:Cfield3;//wheneverIaddanewfield,Ihaveto...#1public:D(){regis.push_back(&field1);regis.push_back(&field2);regis.push_back(&field3);//#1...al