jjzjj

fno-rtti

全部标签

c++ - 显式类型标识符与 RTTI

与RTTI相比,使用您自己的类型标识符有什么优势吗?例如classA{virtualintmytype()=0;};classB:publicA{intmytype(){return1;}};classC:publicA{intmytype(){return2;}};可以更快吗?更少的开销?还是应该在这种情况下始终使用RTTI? 最佳答案 在测试之前,不要假设RTTI的开销会比您的解决方案多/少。您应该尝试这两种解决方案并衡量性能以获得可靠的答案。几年前我实际上问过自己同样的问题,最后我添加了一个成员变量来“固定”类型测试,就像您所

c++ - 当我尝试使用异常时,为什么我的代码在 Qt Creator 中使用 -fno-exceptions 进行编译?

在我指定的项目.pro文件中:QMAKE_CXXFLAGS+=-fno-exceptions但我能够在我的应用程序中抛出异常。对此有什么想法吗?示例:这不应该起作用,但它起作用了#include#includeintmain(intc,char**v){QApplicationapp(c,v);try{throw1;}catch(inti){}returnapp.exec();} 最佳答案 您不能通过设置QMAKE_CXXFLAGS来关闭异常,因为此选项由CONFIG处理。你应该使用CONFIG-=exceptions关闭它们。QM

c++ - 将 RTTI 与从外部库派生的对象一起使用

我正在使用一个外部库,需要创建一个观察者模式,其中观察者派生自属于该库的对象。我不想更改库中的基类,同时我必须使用指向这个不可更改的基类的引用/指针列表。最重要的是,该库构建了一个对象列表,我需要从中筛选出适合作为观察者的对象。我写的代码大致是这样的:#include#include#include//ThisclassisfromanexternallibrarywhichIdon'twanttochagneclassBaseFromLibrary{public:virtual~BaseFromLibrary(){}};classBaseOfObserver{public:voidn

c++ - 在 Mac OS X 上以多态方式捕获 -fno-rtti 共享库中的异常

我正在使用f-no-rtti构建一个共享库。在内部,此库抛出std:invalid_argument并捕获std::exception,但从未输入catch子句。以下代码重现了该问题(g++4.2、MacOSX10.6)://library.cpp:exportsf(),compiledwith-fno-rtti#include#includeextern"C"{voidf(){try{throwstd::invalid_argument("std::exceptionhandler");}catch(std::exception&e){std::cout//main.cpp:them

c++ - 为 clang 工具启用 RTTI?

我正在尝试使用clang的libTooling来构建一个基本的源到源转换工具。我想使用boost::regex和boost::filesystem,但链接到它们需要异常并启用RTTI。根据clangmailinglist,应该可以在不破坏任何东西的情况下启用RTTI。就是说,我找不到指示构建系统启用RTTI的设置或变量。(我正在使用cmake)。我可以将-frtti和-fexceptions标志添加到编译器命令,但clang构建系统正在添加它自己的-fno-rtti,-fno-exceptions标志似乎具有更高的优先级。 最佳答案

c++ - 使用 -fno-access-control 进行单元测试

我见过很多在单元测试时访问私有(private)变量的疯狂方法。我见过的最令人兴奋的是#defineprivatepublic。但是,我从未见过有人建议在编译器级别关闭私有(private)变量。我一直以为你做不到。我曾向许多开发人员提示说,如果您可以只告诉编译器为这个文件后退,单元测试会容易得多。然后我偶然发现了-fno-access-controlGCC编译器选项。这显然是单元测试的完美方式。你的原始源文件没有被修改,没有注入(inject)friend只是为了单元测试,没有用奇怪的预处理器魔法重新编译。编译单元测试时,只需轻按“无访问控制”开关即可。我错过了什么吗?这是我希望的单

c++ - 我可以解开 GCC 的 RTTI 名称吗?

使用gcc,当我使用typeid请求对象/变量的类型时,我从type_info::name方法得到的结果与我期望在Windows上得到的结果不同。我用Google搜索了一下,发现RTTI名称是特定于实现的。问题是,我想获得一个类型的名称,因为它会在Windows上返回。有没有简单的方法可以做到这一点? 最佳答案 如果这正是您要问的,那么对于type_info::name()返回的名称,没有编译器开关可以使gcc表现得像msvc。但是,在您的代码中,您可以依赖gcc特定的__cxa_demangle函数。事实上有anansweronS

ios - 是否可以在 Build Phases 的编译源中不添加 "fno-objc-arc"来启用非 arc 文件?

是否可以在构建阶段不向编译源添加fno-objc-arc以某种方式处理非arc文件?更具体地说,有没有办法在代码中的某处添加fno-objc-arc?原因是,我想开源我的一个使用非arc文件的库,我不希望使用我的库的人手动添加fno-objc-arc。只需拖放... 最佳答案 没有。但是如果你看看一些库做了什么,它们会编写宏来有条件地调用MRC调用,例如release、autorelease等,具体取决于用户是否是否使用ARC进行编译,例如使用__has_feature(objc_arc)测试。然后代码使用这些宏,而不是标准的rel

C++之RTTI机制

RTTI简介RTTI(RuntimeTypeIndentification)即运行阶段类型识别。这是C++新引进的特性之一。RTTI旨在为程序在运行阶段确定对象的类型提供一种标准方式。这RTTI听起来是不是有点java中反射的味道?大差不差...在C++中,只有类中包含了虚函数时才会启用RTTI机制,也就是当存在多态时才会存在RTTI机制,因为不存在多态的话在编译阶段既可以确定类型信息。运行时类型识别(RTTI)功能主要由以下两个运算符实现:typeid运算符,用于返回表达式的类型dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针RTTI与dynamic_cast我

c++ - 在 OO 设计中避免 RTTI

我最近在某个论坛上看到一个面向对象的设计问题,开始考虑使用RTTI。然而,这一定是糟糕的设计,但我想不出替代方案。这是一个简单的问题:使用OO概念为以下场景创建C++程序-Mydog,namedBuddy,livesinthebackyard.Hebarksatnightwhenheseesacatorasquirrelthathascometovisit.Ifheseesafrog,andheishungry,heeatsit.Ifheseesafrogandheisn'thungry,heplayswithit.Ifhehaseaten2frogsalready,andisstil