草庐IT

static_pointer_cast

全部标签

c++ - 如果函数被称为 constexpr,则有条件地 static_assert

我知道有人提议使用constexpr()运算符,但这还没有在gcc/clang中实现。我也知道有一个使用机器代码编辑等技巧的实现:http://saadahmad.ca/detecting-evaluation-context-inside-constexpr-functions/我想知道是否有一个有点受限的解决方案:structF{constexprF(intv){ifconstexpr(constexpr()){static_assert(v>0);}else{assert(v>0);}}};//...constexprFf{0};//shouldtriggeracompile-t

c++ - dynamic_cast 真的适用于多重继承吗?

我想看看是否可以创建“接口(interface)”,继承它们,然后在运行时检查是否有任何随机类实现了该接口(interface)。这是我的:structGameObject{intx,y;std::stringname;virtualvoidblah(){};};structAirholder{intoxygen;intnitrogen;};structTurf:publicGameObject,publicAirholder{Turf():GameObject(){name="Turf";}voidblah(){};};voidremove_air(GameObject*o){Air

c++ - 在 VS2008 和 GCC 中编译 static const int = X 的最佳代码

我在编写需要在VisualStudio2008和GCC4.6中编译(并且还需要编译回GCC3.4)的C++代码时遇到了一个问题:staticconstint类成员。Otherquestionshavecoveredstaticconstint类成员所需的规则。特别是,标准和GCC要求变量在一个且仅一个目标文件中有定义。但是,VisualStudio在编译包含.cpp文件中的定义的代码(在Debug模式下)时会产生LNK2005错误。我试图在其中做出决定的一些方法是:使用.cpp文件中的值而不是header对其进行初始化。使用预处理器删除MSVC的定义。将其替换为枚举。用宏替换它。最后两

c++ - 多重继承 : size of class for virtual pointers?

给定代码:classA{};classB:publicvirtualA{};classC:publicvirtualA{};classD:publicB,publicC{};intmain(){cout输出:sizeof(D)8每个类都包含自己的虚指针,但不包含其任何基类的虚指针,那么,为什么class(D)的Size是8? 最佳答案 这取决于编译器的实现。我的编译器是VisualStdioC++2005。代码如下:intmain(){cout会输出sizeof(B):4sizeof(C):4sizeof(D):8B类只有一个虚指针

c++ - 铿锵错误 : ambiguous conversion for static_cast

我有以下代码:typedefintAliasB;typedefunsignedshortAliasA;classAlias{public:explicitAlias(intsomeInt){}};//(*)!!belowbreakstheconversionpathviaAliasA!!//typedefAliasAliasA;classC{public:C(){}};classB{public:B(){}B(constAliasB&value){}operatorAliasB()const{return-1000;}Ccombine(constB&someB){returnC();}

c++ - C++ 对 static const 整数类型应用了哪些特殊规则?

我的印象是C++将相同的特殊规则应用于staticconst整型regardless是否声明于命名空间范围或在类/结构/union内声明。现在我在想我被不合规的编译器教坏了。staticconstintA=1;structs{staticconstintA=1;};除了范围上的明显差异,A和s::A有何不同?...它们的用法何时会被替换为字面值?...我什么时候可以拿到它的地址?...什么时候需要单独定义它们?我对C++03特别感兴趣。 最佳答案 static关键字在类作用域中的含义不同并在命名空间范围内。事实上,它在命名空间范围内

C++11 Dynamic Cast If Else Chain -> 开关

考虑以下几点:structB{};templatestructD:B{Tt;}voidg(inti){...}voidg(strings){...}voidg(charc){...}voidf(B*b){if(dynamic_cast*>(b)){g(dynamic_cast*>(b)->t);}elseif(dynamic_cast*>(b)){g(dynamic_cast*>(b)->t);}elseif(dynamic_cast*>(b)){g(dynamic_cast*>(c)->t)}elsethrowerror;};这里只有三种可能的T类型——int、string、char

C++ map<char, static method pointer>?

这个问题在这里已经有了答案:Howtocreateclassobjectsdynamically?(3个答案)关闭7年前。我已经编写了一个非常基本的表达式解析器,我希望它是可扩展的,以便它可以解析用户定义的表达式类型。例如,如果在解析时遇到字符,我想创建一个用于解析以此字符开头的表达式的类的实例。我有两个问题:如何将字符关联到静态方法指针?我想使用一个静态方法来返回类的一个新实例,因为我无法获得指向类构造函数的指针。以下语法可能是错误的,但这就是想法:typedefstaticIValue*(*returnPtrIValue)();map...假设我有A类,B类扩展了A类,我可以初始化

c++ - 为什么允许将 void* 的 static_cast 转换为另一种类型?

我刚刚在读这个帖子:Simplec++pointercasting这让我开始思考为什么不允许在不同指针类型之间进行static_cast(允许的情况除外)除非您将static_cast转换为void*作为中间步骤。在我看来,要么两者都被允许,要么两者都不被允许。这是一个例子:char*cs;unsignedchar*ucs;cs=reinterpret_cast(ucs);//1)allowed,ofcoursecs=static_cast(ucs);//2)notallowed:incompatiblepointertypescs=static_cast(static_cast(uc

c++ - boost::lexical_cast<> 的语言环境不变保证

我正在使用boost::lexical_cast(double)用于将double转换为字符串,生成JSON序列化字节流,即(在远程端)由.NET解析。我能够强制.NET使用InvariantCulture用于解析,从而在每种可能的语言上返回可预测的结果。但是,我无法在boost::lexical_cast中找到此保证文档。我试了一下,对于不同的区域设置,它的工作方式相同。但是,我不能仅从几个测试中确定,我是否遗漏了文档中的某些内容,或者根本无法保证这一点,我必须使用其他东西吗?编辑:我发现了一个问题。std::locale::global(std::locale("Czech"));