草庐IT

c++ - 在 C++ 中,哪种数据类型用于非常大的数字?

我必须在我的程序中存储数字600851475143。我也尝试将其存储在longlongint变量和longdouble中,但在编译时显示错误integerconstantistoolargefor"long"type.我也尝试过unsignedlonglongint。我正在使用MinGW5.1.6在Windows上运行g++。我应该使用什么数据类型来存储数字? 最佳答案 longlong可以,但您必须在文字上使用后缀。longlongx=600851475143ll;//canuseLLinsteadifyouprefer.如果您将

c++ - C++ 11 auto关键字多少太多了?

我一直在为复杂的模板化类型使用C++11标准中可用的新auto关键字,我相信它就是为此而设计的。但我也将它用于以下用途:autofoo=std::make_shared();更怀疑的是:autofoo=bla();//wherebla()returnashared_ptr我还没有看到很多关于这个话题的讨论。似乎auto可能被过度使用,因为类型通常是一种文档和健全性检查的形式。您在使用auto方面划清界限,这个新功能的推荐用例是什么?澄清一下:我不是在征求哲学意见;我正在询问标准委员会对这个关键字的预期用途,并可能对在实践中如何实现预期用途发表评论。 最佳答案

c++ - 将 C++ 模板类型 T 修改为 "long T"?

有什么方法可以将乘法返回的精度加倍(以避免溢出)?templateclassMyClass{Tmultiply(Ta,Tb){returna*b;}}类似于:longTmultiply(Ta,Tb){returna*b;}因此无论给出'int'、'long'或'double',乘法都会返回'longint'、'longlong'或'longdouble'。这是一个普遍的问题。我正在通过内部使用double来解决它。但我的问题是,在C++中是否有任何机制可以将类型提升为它的“长”变体? 最佳答案 一个可能的解决方案是定义你自己的类型特

c++ - 有哪些库可用于解析c++以提取类型信息

我正在寻找一种方法来解析C++代码以检索有关类的一些基本信息。我实际上不需要代码本身的太多信息,但我确实需要它来处理诸如宏和模板之类的事情。简而言之,我想提取代码的“结构”,即您将在UML图中显示的内容。对于代码库中的每个类/结构/union/枚举/typedef,我只需要(在处理模板和宏之后)是:他们的名字他们所在的命名空间包含的字段(类型名称,字段名称和访问限制,例如private/mutable/etc)包含在(返回类型、名称、参数)中的函数声明文件此数据定义开始的行号/列号(或文件中的字节偏移量)代码中的实际说明与我的目的无关。我预计很多人会说我应该为此使用正则表达式(甚至是F

c++ - 为什么构造函数在使用 CHAR 类型的参数调用时选择类型 INT 而不是 SHORT?

可以看出,在下面的代码中,正在调用参数类型为int的构造函数。我知道int在这里没问题。但为什么不short呢?作为'A'的ASCII值给出short可以容纳的65。根据什么条件调用数据类型为int的构造函数?#includeclassRightData{intx;public:RightData(shortdata){cout 最佳答案 integralpromotion的结果对于char是int(不是short);和促销(例如char->int)有更高的rankingoverloadresolution中的其他转换(例如char

c++ - bool 在内存中是如何表示的?

如前所述inthedocs,bool数据类型至少占用一个字节的内存。AsimilarquestionwasaskedonSObefore(Howabooltypevariableisstoredinmemory?(C++)),但是这个讨论和文档似乎只讨论了boolean数据类型占用的空间量,而不是当我在内存中实际发生的事情这样做:boolb=true;那么内存中到底发生了什么?未用于存储此信息的7位会发生什么变化?标准是否为此规定了行为?它们是未定义的吗?或者C++总部的某个人只是这样做了:enumbool:char{false=0,true=1}; 最佳答

c++ - 错误 "xxxx"没有命名类型

我在尝试编译以下代码时遇到问题:#include#include#include#include#includeusingnamespacestd;mapmapDial;mapDial['A']=2;intmain(){cout编译器给了我一个错误:'mapDial'doesnotname类型错误。我是c++的新手,真的不知道这里发生了什么。这里有人可以帮我解决这个问题吗?谢谢!! 最佳答案 你不能在全局范围内执行任意表达式,所以mapDial['A']=2;是非法的。如果你有C++11,你可以这样做mapmapDial{{'A',

c++ - 按位非 (~) 的奇怪行为

如何解释以下行为?#includeusingnamespacestd;intmain(){unsignedchara=8;cerr>6;cerr>6;cerr输出:a:8b:255c:3经过进一步测试,(~a)似乎变成了int而不是unsignedchar。这就是1移入的原因。这是怎么回事?编辑:我的编译器只是标准的gcc4.1.2 最佳答案 C中的所有算术运算符和按位运算符如果最初是较短的整数类型,则总是将它们的参数扩展到至少int。这就是语言的定义方式。语言规范将此称为“积分提升”。(这样做的根本原因是为了更容易在硬件不支持对比

c++ - `auto` 说明符的编译时间是否较慢?

从C++11开始,我们可以使用autoa=1+2而不是inta=1+2并且编译器推断出a的类型本身。它是如何工作的?在编译时(更多操作)是否比自己声明类型慢? 最佳答案 auto要求C++11编译器生成一些有限typeinference(查看Ocaml如果你想要一些更性感的类型推理语言)。但是开销只是编译时的。如果你替换autoa=1+2;与inta=1+2;(两者具有相同的含义,请参阅answerbysimplicis)并且如果您要求编译器optimize(甚至可能不要求优化)你可能会得到相同的machinecode.另见this

ruby - 在 Windows 上安装 dm-types。 (Win7 x64)

我正在尝试在我的机器上为DataMapper安装dm-typesgeminstalldm-types我已经从RubyInstaller(1.9.3)安装了Ruby,并且还安装了DevKit。(以及其他一些gem,如sinatra、haml、dm-core和bcrypt-ruby)。但是,当我运行“geminstalldm-types”时,会发生这种情况。C:\Users\Lev>geminstalldm-typesTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile.