草庐IT

cross-cast

全部标签

c++ - dynamic_cast 何时因隐藏符号而失败?

根据关于可见性的gccwiki(https://gcc.gnu.org/wiki/Visibility,请参阅“C++异常问题(请阅读!)”)部分,但似乎也是一个示例(dynamic_castfailedwhenhidingsymbol),隐藏类可以导致有效的dynamic_cast失败。我想通过示例准确了解这种情况何时发生:任何人都可以给我一个小示例来正确理解效果吗?这是我的尝试和理解(在Linux上使用gcc>7):据我了解,我需要的是vaguelinkage发生,当基类没有关键方法时发生。所以我尝试了这个基本层次结构:classA{virtual~A();virtualvoidp

c++ - 错误 : jump to label 'foo' crosses initialization of 'bar'

以下C++示例无法使用gcc或clang进行编译,但仅使用ICC生成警告,而使用MSVC则完全不生成任何警告:intmain(intargc,char*argv[]){if(argcg++:init.cpp:13:error:jumptolabel‘clean_up’init.cpp:4:error:fromhereinit.cpp:7:error:crossesinitializationof‘inti’clang++:init.cpp:4:9:error:cannotjumpfromthisgotostatementtoitslabelgotoclean_up;^init.cpp:

c++ - 具有模板特化的 constexpr 数组成员 : inconsistent behavior cross compilers

考虑以下代码:#includetemplatestructfoo{};templatestructfoo{staticconstexprcharvalue[]="abcde";};templatestructbar{staticconstexprcharvalue[]="abcde";};templatestructbaz{staticconstexprintvalue=12345;};intmain(){charc=foo::value[2];chard=bar::value[2];inte=baz::value;std::cout编译时:clang++-std=c++14./tes

c++ - 为什么这个来自Objective-C++的dynamic_cast调试成功但发布失败?

我在最新版本的Xcode(撰写本文时为9.4.1)中构建了一个C++框架,我再次在Xcode中从Objective-C++代码中使用它。我需要执行从一种指针类型到另一种指针类型的dynamic_cast。但是,dynamic_cast仅适用于调试版本,不适用于发布版本。关于dynamic_cast在Objective-C++中的工作方式,我是否缺少或理解导致此示例失败的某些内容?C++框架TestClass.hppclassParent{public://https://stackoverflow.com/a/8470002/3938401//musthaveatleast1virtu

c++ - static_cast 如何与虚拟继承一起使用?

因此不可能使用具有虚拟继承的static_cast进行向下转型,但是如何进行以下向上转型:classBase{...};classDerived:publicvirtualBase{...};...Derived*d=newDerived();Base*b=static_cast(d);对象的内存布局:[derivedpart|basepart]我知道向上转型被认为是“安全的”,但是当继承是虚拟的时,编译器如何在编译时知道基础子对象的偏移量?static_cast是否使用vtable?当我们有这样的东西(注意它不是虚拟的)时,这尤其令人困惑:classThird:publicDeriv

c++ - std::move into static_pointer_cast:为什么 static_pointer_cast 没有右值引用重载?

假设我们有一个函数需要一个按值共享的指针。(在现实生活中的例子中,我通过右值引用获取它并将其转发给成员。)voidf(std::shared_ptrptr){...}但是我们只有一个指向基类的共享指针,所以我们使用static_pointer_cast:std::shared_ptrptr=std::make_shared();f(std::static_pointer_cast(ptr));第一个赋值(从临时构造ptr)是否触发了引用计数的原子递增和递减,或者共享指针是否被移动?(请注意,它正在向上转换。)在static_pointer_cast中有引用计数的原子增量。如果我们不再需

c# - 与 COM 中的 QueryInterface 或 C++ 中的 dynamic_cast 相比, "as"的成本是多少?

我仍在尝试将我深厚的旧知识从C/C++映射到我较浅的.Net知识。今天是时候在C#中使用“as”(隐含地“is”和cast)了。我对“as”的心理模型是,它是一个QueryInterface或dynamic_cast(一个带有指针参数的dynamic_cast,而不是引用,也就是说)对于C#。我的问题有两个方面:我的比较公平吗?与QueryInterface或dynamic_cast相比,“as”的相对成本是多少? 最佳答案 是的,比较是公平的,尤其是在处理指针时。这三个中的每一个要么成功并返回目标类型的非空指针,要么返回null。

c++ - 为什么 std::bad_cast 被 boost::locale 抛出?

我试图了解如何使用boost::locale来比较忽略大小写和变体的字符串。我直接尝试了Boost文档中的代码:http://www.boost.org/doc/libs/1_51_0/libs/locale/doc/html/collation.htmlboost::locale::generatorgen;std::localevLocale=gen("");std::wstringa=L"Façade",b=L"facade";//Followingwillthrowbad_castbooleq=std::use_facet>(vLocale).compare(boost::lo

c++ - std::chrono::duration_cast - GCC 实现有问题吗?

我想我在std::chrono::duration_cast的GCC实现中发现了一个错误。谁能证实我这一点?测试代码:usingTicks=std::chrono::duration>>;usingdur=typenamestd::chrono::system_clock::duration;intmain(){std::chrono::time_pointearliest{std::chrono::duration_cast(std::chrono::time_point::max().time_since_epoch())};autoticks=std::chrono::time_

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