草庐IT

c++ - c++ 中有标准的 'int class' 吗?

C++是否有(至少或多或少)标准的int类?如果不是这样,是否计划用于C++13?如果不是,是否有任何特殊原因?我猜OOP设计会从中受益,例如,在返回int的自定义类中有一个赋值运算符会很好:inti=myclass;不是inti=myclass.getInt();好的,有很多它可能有用的示例,为什么它不存在(如果不存在)?它用于航位推算和其他滞后补偿方案,并将这些值视为“正常”变量会很好,希望无论如何! 最佳答案 itwouldbenicetohaveanassignmentoperatorinacustomclassthatre

c++ - 无法解释的 C++ 默认 int 值

我一直在重构一些代码,我注意到一些涉及未初始化的int数组的奇怪行为:intarr[ARRAY_SIZE];我设置了一个断点,似乎所有值都默认为-858993460。这个值有什么特别之处吗?知道为什么它们不默认为0吗? 最佳答案 在C++中没有“默认值”——变量和数组元素,在被您的代码初始化之前,将包含内存中最后的任何内容。换句话说,当这些变量被声明时,内存中就预留了一block空间供它们使用。上次使用内存时留下的内存位仍然存在,导致您的变量最初看起来好像充满了“垃圾”。内存并不总是立即清零的原因是速度——将内存清零需要时间。您可以

c++ - 将 C++ 与 Objective-C 结合使用,如何修复 "Conflicting declaration ' typedef int BOOL'"?

我有很多C++代码,最初是在PC上构建的。我试图让它在Mac上与Objective-C一起工作。为此,我创建了一个Objective-C框架来容纳C++代码并添加了一个瘦包装器。但是我在我的C++代码中遇到了typedef问题。当我在PC上使用C++时,我使用了WinDef.h中定义的BOOL变量。因此,当我在Mac上移动所有内容时,我添加了typedefintBOOL;以确保BOOL变量仍会按预期编译。但是当我尝试编译时出现错误:“Conflictingdeclaration'typedefintBOOL'”。我假设这是因为BOOL是Objective-C中的关键字,因此已经定义了。

c++ - C++11 是否强制 pow(double, int) 使用较慢的 pow(double, double)?

这个问题在这里已经有了答案:Whywasstd::pow(double,int)removedfromC++11?(1个回答)关闭9年前。在C++03中,使用例如std::pow(double_val,6)比使用std::pow(double_val,6.0)快得多。使用C++11编译时不再是这种情况。查看gcc的libstdc++-4.8中的cmathheader,可以看到显式pow(double,int)不再存在,这种情况由以下将int提升为double的模板处理:templateinlinetypename__gnu_cxx::__promote_2::__typepow(_Tp

c++ - C/C++ 将 int 转换为 short 和内联 asm(特定于 ARM)

这不是一个微不足道的问题。注意:我不需要意见或建议来使用纯asm。我实际上需要完成我正在谈论的事情:在将结果分配给shortint时获得没有此符号/零扩展optcode的内联asm。我正在处理一个将16位短裤用于许多功能的库,我正在优化它。我需要使用内联asm添加一些优化函数。问题是在很多地方函数的结果被分配给一个短整型。即,编译器生成uxth或sxtharm操作码。我的目标是避免这个问题并确保不会生成这个无用的操作码。首先,我需要定义我的优化函数来返回shortint。这样,如果它被分配给一个int或一个shortint,就没有额外的操作码来转换结果。问题是我不知道如何跳过编译器在我

c++ - 将 Z3 整数表达式转换为 C/C++ int

我是Z3的新手,在这里和在Google上搜索了我的问题的答案。不幸的是,我没有成功。我正在使用Z34.0C/C++API。我声明了一个未定义的函数d:(IntInt)Int,添加了一些断言,并计算了一个模型。到目前为止,一切正常。现在,我想提取模型定义的函数d的某些值,比如d(0,0)。以下语句有效,但返回一个表达式而不是函数值,即d(0,0)的整数。z3::exprargs[]={c.int_val(0),c.int_val(0)};z3::exprresult=m.eval(d(2,args));支票result.is_int();返回真。我(希望不要太愚蠢)的问题是如何将返回的表

c++ - 有没有办法在使用 C++11 调用函数期间将 `vector<int>` 自动提升为 `vector<double>`?

如果我定义一个接受double的函数,我通常可以用int来调用它并获得正确的行为。doublesquare(doubled){returnd*d;}square(1);//validcall但是,如果我有一个接受vector的函数,用vector调用它是无效的doublesum(constvector&d){doubles=0;for(inti=0;if(1,5);sum(f);//Compilererror一个解决方案是使用模板:templatedoubletsum(constvector&d){doubles=0;for(inti=0;if(1,5);tsum(f);//Valid

c++ - 构造函数中的 const int ref 可以安全地绑定(bind)到文字吗?

我知道该标准有一个关于延长临时对象生命周期的异常(exception),基本上说在构造函数中绑定(bind)一个const引用不会延长生命周期,但这是否也适用于文字?例如:classC{private:constint&ref;public:C(constint&in):ref{in}{}};如果我有一个函数返回这种类型的对象Cf(){Cc(2);returnc;}如果我知道c.ref的值会在调用者中未定义吗? 最佳答案 否。构造函数完成执行后,您将无法使用该引用。当非类类型的纯右值绑定(bind)到相同类型的const引用时,总是

c++ - 这是合法的 C/C++ 吗? `int* p = (int[]) {1,2,3} ;`

Thisanswerofmine生成了一些评论,声称以下构造不是合法的C/C++:voidf(int*a);f((int[]){1,2,3,4,0});(有关完整程序,请参阅thisideonelink)。但我们无法解决问题。任何人都可以阐明这一点吗?各种标准都有什么说法? 最佳答案 据我所知,它是有效的C99-传递的是复合文字。C99标准以此为例(§6.5.2.5/9):EXAMPLE1Thefilescopedefinitionint*p=(int[]){2,4};initializesptopointtothefirstele

c++ - 我应该更喜欢在 C++ 代码中使用小类型的 int(int8 和 int16)吗?

我在一个针对嵌入式Linux的C++/Qt项目中工作,在这个项目中,我们不断地与处理器的限制“决斗”,特别是在更新用户界面中的图形时。由于这些限制(特别是我们前段时间的情况,当时情况更糟),我总是尽可能地优化代码,如果优化成本最低的话。我所做的其中一项优化是始终针对我正在处理的情况使用正确的整数值:qint8、qint16和qint32,具体取决于我需要的值有多大。但前段时间我在某处读到,与其尝试尽可能使用整数的最小大小,我应该总是更喜欢使用与我的处理器容量相关的整数值,也就是说,如果我的处理器是32-面向位,那么即使不需要这么大的整数,我也更愿意始终使用qint32。一开始我不明白为