草庐IT

c++ - cstdint 之外的数字类型

我一直在我的代码中定期使用cstdint的类型(例如uint32_t),但现在它们不太符合我的需求,尤其是在模板方面。有没有办法指定一个两倍于模板参数大小的整数类型?当我的模板传递一个uint32_t时,我需要它为函数内的一个变量创建一个uint64_t。也许更困难的是,当传递一个uint64_t时,我需要它来创建一个“uint128_t”。我可以用两个模板参数的数组来做到这一点,但是我不能将该数组传递给其他模板函数。这是代码的性能关键部分(我正在做密码学)。与此相关,我是否可以包含一些其他header(按优先顺序:标准、提升、其他)给我128位整数?看起来这个问题回答了这个特定部分:

c++ - 在 C++ 中使用 vector 传递任意数量的参数

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭3年前。Improvethisquestion我正在处理使用析构函数来释放资源的C++对象。将这些对象传递给具有任意数量参数的函数时。在这种情况下有什么办法可以避免使用指针吗?一种可能的解决方案是将指针vector传递给这些对象。如果我传递对象本身,析构函数将被调用两次,一次是真正的对象,另一次是在释放vector时。#include#includeclassinteger{private:intdata;public:integer(int

c++ - 限制类模板类型

我正在尝试使用SFINAE来限制我正在编写的类的允许模板参数类型。这是我想出的一个简单的人为示例,我相信它可以说明我想做的事情。我确定这个问题已经在某个地方得到了回答,但我找不到。以下是我发现的两种解决问题的方法:首先(SFINAE):template::value>::type>classInteger{public:Tvalue;};intmain(){Integeri;//AlowedIntegerd;//NotallowedIntegerdd;//Allowed(Undesired)return0;}我不喜欢这个解决方案的地方是main函数中的第三个示例有效。第二个(stati

c++ - "integer constant is too large for ‘long’ 求最大质因数时键入"

我正在解决Euler项目3:Description:Theprimefactorsof13195are5,7,13and29.Whatisthelargestprimefactorofthenumber600851475143?这是我生成答案的代码。但是我需要一个整数类型来保存600851475143。当我在Mac上的GCC上编译它时,我得到:integerconstantistoolargefor‘long’type".我预计longlong可以轻松持有这个数字。我也试过让它未签名。为什么我的代码不能保存这么小的数字?我该怎么做才能让它发挥作用?#include#includeusi

c++ - 为什么 Google 不希望您使用 C++ 构造函数?

/***AJavaScriptvaluerepresentingasignedinteger.*/classV8_EXPORTInteger:publicNumber{public:staticLocalNew(Isolate*isolate,int32_tvalue);staticLocalNewFromUnsigned(Isolate*isolate,uint32_tvalue);int64_tValue()const;V8_INLINEstaticInteger*Cast(v8::Value*obj);private:Integer();staticvoidCheckCast(v

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

我正在处理一些嵌入式代码,并且正在从头开始编写一些新东西,因此我更愿意坚持使用uint8_t、int8_t等类型。然而,当移植一个函数时:voidfunctionName(char*data)到:voidfunctionName(int8_t*data)在将文字字符串传递给函数时,我收到编译器警告“在指向具有不同符号的整数类型的指针之间转换”。(即调用functionName("putthistextin");时)。现在,我明白了为什么会发生这种情况,并且这些行只是调试,但我想知道人们认为什么是最合适的处理方式,而不是对每个文字字符串进行类型转换。在实践中,我不认为一揽子类型转换比使用

c++ - scanf 与 cin : string as integer processing

我有一个输入字符串“0100”为什么scanf("%i",&n);返回64而cin>>n;给我100?为什么cin以十进制值思考,而scanf以八进制值思考? 最佳答案 Fortheispecifier:  Anynumberofdigits,optionallyprecededbyasign(+or-).Decimaldigitsassumedbydefault(0-9),buta0prefixintroducesoctaldigits(0-7),and0xintroduceshexadecimaldigits(0-f).-sca

c++ - C++ 运算符重载返回中的常量正确性

我有点困惑为什么我被告知要从C++中的二元运算符返回constfoo而不是foo。我一直在阅读BruceEckel的“ThinkinginC++”,在关于运算符重载的章节中,他说“通过使[重载二元运算符的]返回值成为常量,您声明只有一个常量可以为该返回值调用成员函数。这是const正确的,因为它可以防止您将潜在有值(value)的信息存储在最有可能丢失的对象中。但是,如果我有一个返回const的加号运算符和一个前缀增量运算符,则此代码无效:classInteger{inti;public:Integer(intii):i(ii){}Integer(Integer&);constInte

C++/阿杜伊诺 : dynamic int array

我正在为Arduino编写类(class)。到目前为止一切顺利,但我现在有点卡住了...我已经在我的类中声明了一个int数组classmyClass{public:MyClass(intsize);private:int_intArray[];};当我初始化类MyClassmyClass1(5)时,我需要数组看起来像这样{0,0,0,0,0}。我的问题:我需要做什么才能使数组包含“大小”数量的零?MyClass::MyClass(intsize){//whatgoesheretodynamicallyinitializethearrayfor(inti=0;i编辑:跟进下面的各种回复,

c++ - 在 32 位 Windows 上大于 4294967295 的整数

我试图通过构建一个简单的算术计算器应用程序来掌握C++基础知识。现在我正试图弄清楚如何让它能够在32位Windows上处理大于4294967295的整数。我知道Windows的集成计算器可以做到这一点。我错过了什么?请注意,此应用程序应该可以使用MSVC编译器和g++(MinGW/GCC)进行编译。谢谢。 最佳答案 如果您想同时兼容gcc和msvc,请使用stdint.h>。它的源代码与两者兼容。为此,您可能需要uint64_t。它将使您达到18,446,744,073,709,551,615。还有libraries让你得到和你有内