Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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
Android 什么';s-std=gnu++;0x和-std=c++;0x和应该使用哪一个?_Android_C++_Gcc_C++11_Compiler Options - Fatal编程技术网

Android 什么';s-std=gnu++;0x和-std=c++;0x和应该使用哪一个?

Android 什么';s-std=gnu++;0x和-std=c++;0x和应该使用哪一个?,android,c++,gcc,c++11,compiler-options,Android,C++,Gcc,C++11,Compiler Options,在GCC4.4.3(Android版)中使用-std=c++0x时,我遇到了问题: 是否与C++0x不兼容?据我所知,我认为这可能是一个实现错误(或者,实际上,由于C++0x尚未发布,因此它本身不是一个错误,而是即将发布的标准的当前状态的不完整实现) 以下是为什么,请参考n3225了解-std=c++0x的预期行为: D.7说 每个C头,每个都有一个 表单name.h的名称,其行为就像 标准中的每个名称 由相应的 cname标头放置在 全局命名空间作用域 好的,到目前为止很容易。在标准库名称空间

在GCC4.4.3(Android版)中使用
-std=c++0x
时,我遇到了
问题:


是否与C++0x不兼容?

据我所知,我认为这可能是一个实现错误(或者,实际上,由于C++0x尚未发布,因此它本身不是一个错误,而是即将发布的标准的当前状态的不完整实现)

以下是为什么,请参考n3225了解
-std=c++0x
的预期行为:

D.7说

每个C头,每个都有一个 表单name.h的名称,其行为就像 标准中的每个名称 由相应的 cname标头放置在 全局命名空间作用域

好的,到目前为止很容易。
在标准库名称空间中放置了什么

18.4.1:

typedef unsigned integer type uint64_t; // optional
如何选择?18.4.1/2:

标题定义了所有功能, 类型和宏与中的7.18相同 C标准

德拉特。C标准怎么说?取出n1256,7.18.1.1/3:

这些类型是可选的。然而, 如果实现提供整数 宽度为8、16、32或64的类型 位,无填充位,和(用于 具有 二的补语表示法,它 应定义相应的类型定义 名字

但是,等一下,在Android上使用
-std=c++0x
GCC确实提供了一个没有填充位的64位无符号类型:
unsigned long
。因此需要
提供
std::uint64_t
,因此需要
stdint.h
在全局命名空间中提供
uint64_t

继续,有人告诉我为什么我错了:-)一种可能是C++0x引用“ISO/IEC 9899:1999编程语言-C”,但没有指定版本。是否真的(a)7.18.1.1/3被添加到一个TCs中,并且(b)C++0x打算引用1999年的原始标准,而不是此后的修订?我怀疑这两种情况是否属实,但我手头上没有原始的C99可供检查(a),我甚至不知道如何检查(b)

编辑:哦,至于应该使用哪一种模式,std=c++0x还不是严格的标准兼容模式,因为还没有严格的标准。即使有一个标准,GCC4.4.3也肯定不是它的完整实现。因此,如果
-std=gnu++0x
实际上更完整,我认为没有必要使用它,至少在这方面,对于gcc版本和平台的组合来说是这样


但是,
gnu++0x
将启用您可能不希望代码使用的其他gnu扩展。如果您打算编写可移植的C++0x,那么最终您会希望切换到
-std=C++0x
。但我认为GCC4.4或任何其他正在进行的C++0x实现还不足以从(草案)标准中编写代码,因此您可以直截了当地说“我正在编程C++0x,现在才2011年!”。所以我想说,使用任何一个有效的方法,并且要明白,无论你现在使用哪一种方法,你最终都可能会切换到
-std=c++11

使用GCC4.6的NDK 8b也有同样的问题。
// using -std=gnu++0x
#include <stdint.h>
uint64_t value;  // OK
typedef unsigned integer type uint64_t; // optional