草庐IT

c++ - 当两者都是 32 位宽时,在 C(或 C++)中使用 `unsigned long` 和 `unsigned int` 是否存在可观察到的差异?

我正在使用带有编译器的MPC56XX(嵌入式系统),int和long都是32位宽。在一个必需的软件包中,我们对32位宽的类型有以下定义:typedefsignedintsint32;typedefunsignedintuint32;在新版本中,这在没有太多文档的情况下更改为:typedefsignedlongsint32;typedefunsignedlonguint32;我明白为什么这是一件好事:整数在short和long之间有一个转换等级,所以理论上在使用第一组时可以应用额外的转换定义。我的问题:考虑到包作者强加给我们的上述更改,是否存在可以想象的情况,这样的更改会更改已编译的代码

c++ - C++ 中的 int[pointer-to-array] 是标准的吗?

这个问题在这里已经有了答案:Witharrays,whyisitthecasethata[5]==5[a]?(19个回答)Whydoesx[y]==y[x]inc++?[duplicate](3个答案)关闭8年前。据我所知,可以编写以下代码:char*a=newchar[50];for(inti=0;i它编译。有用。它完全与相同char*a=newchar[50];for(inti=0;i仅仅是因为:a[b]默认情况下作为宏*(a+b)实现,两个代码示例都有效的事实只是一个意外/特定于编译器它已在某处标准化,此类算法的结果在每个平台上都应该相同假设加法应该是可交换的是合理的,但如果我们

c++ - int *pi = new int(0); 中 int(0) 的含义?

int*pi=newint(0);这里的0有什么意义?是不是表示长度为0的整数数组? 最佳答案 它是一个初始化器(构造函数参数)。新创建的int的值为0。 关于c++-int*pi=newint(0);中int(0)的含义?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3056309/

c# - 将 C++ int 数组编码到 C#

我想将一个整数数组从C++编码到C#。我有一个非托管C++dll,其中包含:DLL_EXPORTint*fnwrapper_intarr(){int*test=newint[3];test[0]=1;test[1]=2;test[2]=3;returntest;}在header中声明extern"C"DLL_EXPORTint*fnwrapper_intarr();然后我使用pinvoke将其编码到C#中:[DllImport("wrapper_demo_d.dll")][return:MarshalAs(UnmanagedType.SafeArray)]publicstaticext

c++ - 为什么这个 double 到 int 的转换不起作用?

我一直在彻底寻找一个正确的解释来解释为什么会发生这种情况,但仍然不太明白,所以如果这是转贴,我深表歉意。#includeintmain(){doublex=4.10;doublej=x*100;intk=(int)j;std::cout我似乎无法用任何其他数字复制此行为。也就是说,用该形式的任何其他数字替换4.10,输出是正确的。一定有某种我不理解的低级转换内容。谢谢! 最佳答案 4.1不能用double精确表示,它可以用更小的东西来近似:doublex=4.10;printf("%.16f\n",x);//Displays4.09

c++ - long double 与 long int

我正在做一个计算彩票概率的程序。规范是47选5,27选1所以我做了以下事情:#includelongintchoose(unsignedn,unsignedk);longintfactorial(unsignedn);intmain(){usingnamespacestd;longintregularProb,megaProb;regularProb=choose(47,5);megaProb=choose(27,1);cout但是该程序不起作用。程序计算30秒,然后给我Process4exitedwithcode-1,073,741,676我必须将所有longint更改为longdo

c++ - 在初始化中使用新声明的变量(int x = x+1)?

我偶然发现了一个让我吃惊的行为:写作时:intx=x+1;在C/C++程序(或涉及新创建的变量x的更复杂的表达式)中,我的gcc/g++编译没有错误。在上述情况下,X之后为1。请注意,先前声明的范围内没有变量x。所以我想知道这是否是正确的行为(甚至在某些情况下可能有用)或者只是我的gcc版本或一般gcc的解析器特性。顺便说一句:以下内容不起作用:intx++; 最佳答案 用表达式:intx=x+1;变量x出现在=符号处,这就是为什么您可以在右侧使用它的原因。“存在”是指变量存在但尚未由初始化程序部分赋值。但是,除非您使用静态存储持续

C++ "error: passing ' const std::map<int, std::basic_string<char>>' as ' this' argument of ..."

使用以下代码(为简洁起见摘录):颜色.h:classcolor{public:color();enumcolorType{black,blue,green,cyan,red,magenta,brown,lightgray,nocolor};colorTypegetColorType();voidsetColorType(colorTypecColortype);stringgetColorText()const;private:colorTypecColortype=nocolor;mapcolors={{black,"black"},{blue,"blue"},{green,"gre

C++:初始化指向 int 的指针

这是我在VisualStudio2010上运行的示例代码:#includeintmain(){int**p(NULL);}我收到此错误:errorC2059:syntaxerror:'constant'但是如果我将int**p(NULL);更改为int**p=NULL;上面的代码可以正常编译。在GCC(版本:4.4.2)上检查过,两者都工作正常。我在这里缺少什么? 最佳答案 VC++编译器似乎对指向指针的指针的初始化感到困惑......例如这有效int(**p)(NULL);这些都没有int*i;int**p(&i);int**o(

c++ - 为什么使用 static_cast<int>(x) 而不是 (int)x?

我听说static_cast函数应该比C风格或简单函数风格的转换更受欢迎。这是真的?为什么? 最佳答案 主要原因是经典的C转换不区分我们所说的static_cast()。,reinterpret_cast(),const_cast(),和dynamic_cast().这四件事完全不同。Astatic_cast()通常是安全的。语言中有一个有效的转换,或者一个适当的构造函数使它成为可能。唯一有点冒险的时候是当你向下转换到一个继承的类时;您必须通过语言外部的方式(如对象中的标志)确保该对象实际上是您声称的后代。dynamic_cast(