草庐IT

non_rtti_object

全部标签

c++ - 来自 Xcode 8.3.2 : Non-portable path to file - specified path differs in case from file name on disk 的错误警告

出于某种原因,我的代码库突然开始收到数以千计的此类警告。但到目前为止,所有有问题的文件和路径都是完全正确的,与我在磁盘上看到的与Finder相匹配。他们是不是在暗地里另有幕后?当问题实际上并不存在时,为什么Xcode会生成这些警告?尽管http://stackoverflow.com/questions/43067017/non-portable-path-to-file-file-h-specified-path-differs-in-case-from-file-na是关于相同的警告,在这种情况下我已经验证导入路径与磁盘上的文件名匹配。 最佳答案

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++ - 应该如何使用 const/non-const 参数重载函数?

我有以下代码://stringspecializationsvoidfoo(constchar*a,constchar*b);voidfoo(constchar*a,conststd::string&b);voidfoo(conststd::string&a,constchar*b);voidfoo(conststd::string&a,conststd::string&b);//genericimplementationtemplatevoidfoo(TAa,TAb){...}问题是这个测试用例:chartest[]="test";foo("test",test);最终调用了foo的

c++ - 使用 static_assert 检查 Q_OBJECT 宏

如果我得到的类型声明不包含Q_OBJECT宏,我有一些有趣的需要显示编译错误。我发现了一种不好的方法。实际上它重复了Qt开发人员的想法来做同样的事情:templatevoidcheckForQObjectMacro(){reinterpret_cast(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast(0));}这很好用,但确实给出了奇怪的错误消息。我想显示一条可读的消息。一种方法是使用static_assert构造。但我不知道如何实现Q_OBJECT宏存在的静态验证条件。也许有人可以提出一个漂亮的黑客?也非常感谢任何想法。

c++ - 是否在定义明确的非构造 "object"上调用非虚拟成员函数?

这个问题在这里已经有了答案:WhatwillhappenwhenIcallamemberfunctiononaNULLobjectpointer?[duplicate](6个答案)Whendoesinvokingamemberfunctiononanullinstanceresultinundefinedbehavior?(2个答案)关闭8年前。在构造函数中,允许调用非虚拟成员函数。根据这个事实是否可以得出以下代码段是明确定义的?structA{voidfoo{std::coutfoo();回答?借助评论中给出的一些链接以及链接页面中给出的链接,我现在认为可以找到答案,例如在http:

c++ - "enumeral and non-enumeral type in conditional expression"背后的推理

自C++11过渡以来,GCC输出警告“条件表达式中的枚举和非枚举类型”。我想了解此警告背后的原因。比较枚举常量有什么危险?很明显我们可以通过以下方式摆脱这个警告-Wno-enum-compare通过显式转换为整数类型但为什么这么麻烦?就个人而言,我一直努力编写无警告代码,通常默认发出的警告是非常合理的。例如,它认为比较有符号和无符号整数是危险的。但是使用枚举是广泛使用的惯用C++元编程。我不知道有任何替代方案,它同样具有可读性、简明扼要且不需要任何实际存储空间。举一个具体的例子:下面的元函数会出现什么问题,以至于警告就足够了?templatestructMaxSize;template

c++ - 2 个重载具有相似的转换 - 内置运算符 integer[pointer-to-object]

我有以下类(class):classDictionaryRef{public:operatorbool()const;std::stringconst&operator[](std::stringconst&name)const;//...};然后我尝试使用它:DictionaryRefref=...;ref["asdf"];//error输出提示两个重载,但只列出一个:1>...:errorC2666:'DictionaryRef::operator[]':2overloadshavesimilarconversions1>...:couldbe'conststd::string&D

c++ - 我可以在编译和链接时将 C++ 主函数和类与 Objective-C 和/或 C 例程分开吗?

我有一个小型C++应用程序,我导入了Objective-C类。它作为Objective-C++文件.mm工作,但任何包含header的C++文件可能最终包含一些Objective-Cheader,必须重命名为.mm扩展名以用于正确的GCC驱动程序。有没有办法为Objective-C类编写一个纯C++包装器,或者我能否以某种方式将Objective-C对象分离出来,然后单独链接它们?也许即使Objective-C类成为一个小库,我也可以在编译时静态重新链接?问题在于这段代码是跨平台的,在通常不使用Objective-C的系统(即非Mac)上编译起来比较困难。尽管预处理器命令限制了Obje

c++ - Objective-C 稳定的 ABI

我主要是一个C++人。由于C++缺少官方ABI,我总是使用类似COM的方法来设计支持多个编译器的组件。最近我遇到了一个问题,即Objective-C是否会替代类COM方法。显然,要让Objective-C成为替代品,需要一个稳定的ABI,因此我想知道是否存在用于Objective-C的稳定ABI(在所有主要操作系统[OSX、GNU/Linux、Windows]上)以及它有多容易它将使用Objective-C(++)作为不同编译器创建的组件之间的“粘合剂”。编辑:正如NikolaiRuhe指出的那样,对COM的简短描述可能会有所帮助。COM本质上是一种“二进制标准”,允许混合不同编译器(

c++ - Qt 信号/槽 : Is it an error to emit a signal from a temporary object?

在Qt中,如果从一个临时对象中调用一个信号,使得该对象可能在调用槽时被删除,这是一个错误吗?如果相关,代码会从临时对象的构造函数发出信号。(注意:没有指针或引用作为参数传递,所以这不是关于悬挂指针或引用的问题。我只是想知道,以最简单的形式,从Qt中的一个临时对象。)这是我的代码的简化版本://MyapplicationclassHandyApplication:publicQApplication{Q_OBJECTpublic:explicitHandyApplication(intargc,char*argv[]);signals:publicslots:voidhandySlot(