草庐IT

c++ - 编译器是否能够优化意大利面条代码?

我正在编写一个在最后生成C++代码的编译器,我不能使用while\for或任何其他正常循环,所以我将它转换为goto\if和这样的分配\调用行:if(i这看起来真的很痛苦,但是GCC编译器可以像上面那样编译和优化代码,就像它由普通循环等组成一样吗? 最佳答案 编译器通过流程图分析优化程序控制流,从编译器的角度来看,在该级别使用goto而不是if分支实际上是等效的。需要牢记的一个警告:如果生成器生成irreduciblecontrolflowgraphs,因为gotos几乎可以在函数的任何地方跳转,这肯定会影响编译器的优化能力。

c++ - 无法在 OpenGL C++ 中渲染三角形

我试着关注thisC中的OpenGL教程,但是当谈到第二个教程时,应该在窗口上绘制三角形的教程,我什么也看不到。所以这就是我所做的,我采用了创建OpenGL上下文、窗口和其他东西的代码,并试图使其更简单:我尝试使用glBegin/glEnd而不是使用VAO。我收到此错误:1282“无效操作”。我只是使用直接来self的LWJGL项目的相同句子。主循环非常简单,我不明白它为什么不起作用,而且1282错误没有给我任何信息。为什么我仍然收到错误消息?#include#include#pragmacomment(lib,"glfw3.lib")#pragmacomment(lib,"glew3

c++ - 在 C/C++ 中声明变量

有人告诉我:“声明接近其使用的变量是有值(value)的”。他纠正我:voidstudent_score(size_tstudent_list_size){//intexam;//intaverage;//intdigit;//intcounter_digits;for(size_ti=0;i我认为这很糟糕,因为这里的变量在每个循环中都进行了初始化。什么是真的? 最佳答案 我鼓励尽可能在局部范围内声明它们,并尽可能接近首次使用。这使得读者更容易找到声明并查看变量是什么类型以及它被初始化为什么。当然,编译器会对其进行优化。

c++ - C/C++ 中的任意大小的整数

问题有没有办法使用c/c++创建任意大小的整数?例如:intmain(void){Inti=Int(3);//3-bitintegeri=1;//Representedas:001}奖金有没有办法对float值做同样的事情? 最佳答案 您不能创建大小小于char的整数(也就是说,每个对象的字节大小是sizeof(char)的倍数,即1).但这不是问题,因为您可以将数字打包成更大的数字。constunsignedsize_in_bits=3;unsigneda=1;//001unsignedb=5;//101unsignedpacke

c++ - CPU 内部并行化

我一直在研究Xorshift*随机数生成器,我遇到了this探索它们的属性。从该站点引用(强调我的):Howcanaxorshift64*generatorbeslowerthanaxorshift1024*generator?Dependencies.Thethreexor/shiftsofaxorshift64*generatormustbeexecutedsequentially,aseachoneisdependentontheresultofthepreviousone.Inaxorshift1024*generatortwoofthexor/shiftsarecomplet

c++ - 如果线程在调用 pthread_join 之前退出怎么办

我有一个小代码void*PrintHello(void*threadid){cout我会在创建后的某个时间加入线程。如果main试图加入一个已经退出的线程,会发生什么? 最佳答案 Whatwillhappenifthemaintriestojoinathreadwhichalreadyexited?连接操作将立即完成并返回。 关于c++-如果线程在调用pthread_join之前退出怎么办,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 如何判断一个 float 是 SNAN 还是 QNAN

我想知道如何打印float是QNAN还是SNAN。我已经将这些位分离为signBitexponentBit和FractBits。unsignedintsign=(i&0x80000000)>>31;unsignedintexponent=(i&0x7f800000)>>23;unsignedintfraction=(i&0x007FFFFF);printf("signBit%d,expBits%d,fractBits0x%08X\n",sign,exponent,fraction); 最佳答案 GNUprovides设施recent

c++ - 使用 malloc() 初始化类

当C++类的内存已从Cmalloc中保留时,应该如何使用它?我正在使用C库(lua),我需要向它公开一个C++类,在这种情况下,为了垃圾收集这些保留空间,lua会保留内存。一个更简单的类似场景如下:#includeclassClase{private:std::stringvalor;public:Clase(){}Clase(conststd::string&valor):valor(valor){}conststd::string&get()const{returnthis->valor;}voidset(conststd::string&valor){this->valor=va

java - 处理循环特殊情况

在Java、C#或C++中,假设我们有一种非常常见的情况,我们需要多次迭代并执行一个函数doX,但只有在一次迭代中我们应该执行一个函数doY。intindex=123456;for(inti=0;i在我看到真正的性能问题的情况下,我通常会在2中中断循环,但这可能会非常痛苦,尤其是在循环体很大的情况下。编译后的代码真的会在每次迭代时检查条件,还是可以由编译器优化?此外,如果index在编译时不是常量,是否可以进行这样的优化? 最佳答案 这通常不会导致严重的性能问题。这是由于branchpredicting.引用这个famousques

c++ - 函数指针 - 为什么,什么时候我可以不用?

免责声明:我已经阅读了无数关于该主题的其他文章,但我仍然不明白。示例:为什么这样做:voidfunc(inta,void(*callback)(int)){/*dosomethingwithaandcallback*/callback(3);}voidpointme(intb){/*dosomethingwithb*/}intmain(){void(*pf)(int);pf=&pointme;func(10,pf);}当我可以简单地做到这一点时:voidfunc(inta){pointme(3);/*dosomethingwitha*/}voidpointme(intb){/*doso