Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VisualStudio如何将boost::function与/GR一起使用-而GCC可以';带-fno-rtti的t?_C++_Visual Studio_Gcc_Android Ndk - Fatal编程技术网

C++ VisualStudio如何将boost::function与/GR一起使用-而GCC可以';带-fno-rtti的t?

C++ VisualStudio如何将boost::function与/GR一起使用-而GCC可以';带-fno-rtti的t?,c++,visual-studio,gcc,android-ndk,C++,Visual Studio,Gcc,Android Ndk,我最近开始使用NDK将一个应用程序移植到Android,遇到以下错误: boost/function/function_base.hpp:220: error: cannot use typeid with -fno-rtti. 通常,我不会对这个错误三思而后行,但是VisualStudio项目文件集/GR-,它禁用了RTTI,并且在使用boost::function时没有问题 我的理论是,因为当可以确定静态类型时,编译器会计算typeid,所以应用程序中每次使用boost::function

我最近开始使用NDK将一个应用程序移植到Android,遇到以下错误:

boost/function/function_base.hpp:220: error: cannot use typeid with -fno-rtti.
通常,我不会对这个错误三思而后行,但是VisualStudio项目文件集
/GR-
,它禁用了RTTI,并且在使用boost::function时没有问题

我的理论是,因为当可以确定静态类型时,编译器会计算typeid,所以应用程序中每次使用boost::function都必须如此。VisualStudio必须首先尝试确定静态类型,而GCC在尝试对其求值之前会立即在typeid上抛出错误


听起来对吗?如果没有,会发生什么?

我没有启动到我的Windows分区,但在MSDN中查找这个分区同样简单

根据:

如果表达式正在解引用指针,则该指针的值 如果为零,则typeid抛出错误的\u typeid异常。如果指针没有 指向一个有效对象,抛出一个非rtti对象异常, 表示试图分析触发故障的RTTI(如 访问冲突),因为对象以某种方式无效(指针错误) 或代码不是用/GR编译的

如果表达式既不是指针也不是基类的引用 对于对象,结果是表示 表达式的静态类型。表达式的静态类型引用 编译时已知的表达式类型


换句话说,如果表达式的类型在编译时无法推断,并且没有/GR,那么您将得到一个异常或编译器错误。但是第二段暗示了它可以在编译时推断出非歧义类型。

两个不同的编译器之间是否一致地定义了BOOST\u NO\u TYPEID?你为什么还要尝试呢?@selbie在这两种情况下都没有定义它。我查看了function.hpp和function/function_base.hpp,都没有检查该符号。我试着添加它,但没有什么不同。@wilx我确信我会打开RTTI,我正在试图理解为什么visualstudio不需要它。听起来不错。请注意,“没有RTTI”已经意味着“不再是C++”,因此编译器可以自由地做任何他们喜欢的事情。特别是,您不能再期望两个编译器的行为相同,因为您消除了它们这样做的一个原因(ISO标准)。作为澄清,您是否同意我在问题中所说的GCC在尝试这样做之前生成错误?您的理论与MSDN所暗示的是一致的。