草庐IT

c++ - 函数参数中 int * array 和 int array[] 的区别

我看到如果函数参数是“intarr[]”或“int*arr”,数组值会改变。哪里不一样了?整数数组[]:voidmyFunction(intarr[],intsize){for(inti=0;i整数*数组:voidmyFunction(int*arr,intsize){for(inti=0;i这两个函数都会更改数组值。intmain(){intarray[3];array[0]=0;array[1]=0;array[2]=0;myFunction(array,3);return0;} 最佳答案 没有区别。两种函数类型(调整后)都是“

c++ - 通过指向 int 的指针为 char 数组起别名合法吗?

我知道标准中明确允许以下内容:intn=0;char*ptr=(char*)&n;cout这个呢?alignas(int)charstorage[sizeof(int)];int*ptr=(int*)&storage[0];*ptr=0;cout本质上,我是在问别名规则是否允许通过指向另一种类型的指针访问一系列字符。如果可能,我希望引用标准中指示某种方式的部分。标准的某些部分让我感到矛盾;(3.10.10)似乎表明它是未定义的行为,前提是storage的动态类型不是int。但是,我不清楚动态类型的定义,std::aligned_storage的存在让我相信这是是可能的。

c++ - decltype( (A{}.int_member) ) 的正确结果是什么?

给定类型A的定义:structA{inti;};根据规范[expr.ref](我使用了n4618):(ifE2isnon-reference,)...IfE1isanlvalue,thenE1.E2isanlvalue;otherwiseE1.E2isanxvalue...显然A{}.i是xvalue;还考虑到[dcl.type.simple]:(fordecltype(e),)—...ifeisanunparenthesizedid-expressionoranunparenthesizedclassmemberaccess...—otherwise,ifeisanxvalue,de

c++ - C++14 是否定义了按位运算符在 unsigned int 的填充位上的行为?

C++标准如果C++14实现包括unsignedint的底层字节中的填充位,标准是否指定是否不得对填充位执行按位操作?此外,C++14标准是否指定是否相等和关系运营商必须忽略填充位?指南如果在这方面缺乏规范,是否有某种就这些运算符在填充位上的预期行为达成共识?我在StackOverflow上发现了相互矛盾的答案。LightnessRacesinOrbit和ecatmur说按位运算符不适合算术,因为它们应用于所有位(包括填充位),而Christoph和BartekBanachewicz假设按位运算符处理整数的逻辑值并忽略填充。引用资料相关回答:关于paddingbits的存在(1,2,3

c++ - 为什么当枚举或 int 值作为函数的 bool 参数传递时 gcc 不发出警告?

我有以下代码:typedefenum{FOO,BAR,BAZ}foo_t;staticvoidafunc(boolis_it_on){/*dothejob*/}intmain(void){afunc(BAZ);return0;}编译此代码不会生成任何警告消息,即使为编译器提供了-Wall-Wextra选项。我什至尝试过使用-Wconversion选项,但它没有效果,因为bool和enum对于g++似乎具有相同的大小。(据我所知,enum类型的大小未在规范中定义)我已经梳理了gcc手册,但一无所获。问题:有没有办法强制编译器在这种情况下生成警告?或者这种隐式转换是否符合C++规范?我使用

c++ - Int to Float to Int转换精度损失

最近,我写了一个小程序,并使用2个不同版本的mingw32(在Windows8上)编译了它。令人惊讶的是,我得到了两个不同的结果。我试着拆解它,但发现没什么特别的。谁能帮帮我?谢谢。exe文件:https://www.dropbox.com/s/69sq1ttjgwv1qm3/asm.7z结果:720720(gcc版本4.5.2),720719(gcc版本4.7.0)编译器标志:-lstdc++-static代码如下:#include#includeusingnamespacestd;intmain(){inta=55440,b=13;a*=pow(b,1);cout程序集输出(4.5

c++ - 为什么bool和int8_t的普通类型在C++中是int32_t?

我很好奇C++中内置bool类型的某些行为。据我了解,std::common_type使用隐式可转换性确定通用类型。我希望带有bool和另一种类型的表达式会导致bool转换为该类型。例如,我可以看到bool+float->float和bool+double->double。但是,bool+int8_t->int32_t和bool+int16_t->int32_t。为什么会这样? 最佳答案 简答:积分推广。在数值运算中,小整数类型(包括bool、char、unsignedchar、signedchar、short、unsignedsh

c++ - char* 和 int* 的区别

char*和int*有什么区别?当然,它们是不同的类型,但是我怎么写char*s1="helloworld";作为"helloworld"它不是一个字符,它是一个字符数组,我不会写*s1作为char*s1={'h','e','l','l','o','','w','o','r','l','d'};和int*a={2,3,1,45,6};有什么区别? 最佳答案 这很简单:一个字符串文字,即"foobar"被编译成一个字符数组,存储在程序的静态部分(即,所有常量存储的地方)和空终止。然后,将this分配给变量只是将指向该内存的指针分配给变

c++ - 使用标量类型的 "const"的好处? (例如 "const double"或 "const int")

///////////////////////////////////////classA{...constdoublefunA(void){...}};Aa;doublex=a.funA();//althoughtheintentionisto//enforcethereturnvaluetobeconstandcannotbe//modified,ithaslittleeffectintherealworld.classA2{...doublefunB(void){...}};///////////////////////////////////////classA{voidset

c++ - 将 int 地址转换为 char 指针的正确方法

如果我需要从ifstream读取intintmyInt=0;fileStream.read(reinterpret_cast(&myInt),sizeof(int));正在使用reinterpret_cast实现该目标的正确方法? 最佳答案 isusingreinterpret_castcorrectwaytoaccomplishthat?是的。更喜欢C++风格的转换,而不是C风格的转换。正如评论中所建议的,使用readmethodfunction的更好方法是:intmyInt=0;fileStream.read(reinterpr