当我g++使用-Og选项编译我的C++程序时,我会看到变量<optimized out>,并且当前行有时会跳过.这种行为是期望在这个优化级别,还是我有一些问题?gcc的手册页说:
-Og
优化调试体验.-Og启用不会干扰调试的优化.它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验.
因此我没想到这种行为.在我的系统上,我有g ++版本4.9.2和gdb版本7.7.1.
是否有一个shell命令,它只是在一个字节数字串和一些命令通过-h选项提供的"人类可读"数字字符串之间来回转换?
澄清问题:ls -l没有-h选项(某些输出被抑制)
> ls -l
163564736 file1.bin
13209 file2.bin
Run Code Online (Sandbox Code Playgroud)
给出大小(以字节为单位),同时-h选项(某些输出被抑制)
> ls -lh
156M file1.bin
13K file2.bin
Run Code Online (Sandbox Code Playgroud)
大小是人类可读的,以千字节和兆字节为单位.
是否有一个shell命令只是简单地163564736进入156M并13209进入13K反向?
将犰狳C++线性代数库文件规定的原因,发展中国家在C++库是一个"通过目前的OpenMP易于并行化的现代C++编译器",但犰狳代码不使用OpenMP的.如何获得与Armadillo并行化的好处?这是通过使用高速LAPACK和BLAS替换之一实现的吗?我的平台是Linux,Intel处理器,但我怀疑这个问题有一个通用的答案.
在我的项目中,我必须使用其符号不在命名空间中的库.该库的类具有相当简短和通用的名称,如Logger和Reader.我还在项目自己的类中使用了一些这些名称.
考虑我的项目的符号也没有命名空间的情况.可以通过将我的代码放在命名空间中并使用限定名称(例如::Logger和My::Logger)进行区分来解决名称冲突,但我更喜欢将库的符号命名为.有什么方法可以将库的符号"强制"到我选择的命名空间中吗?
其次,如果我想使用两个定义非命名空间的不同库,该怎么办Logger?在这种情况下,有没有办法避免命名空间冲突?
我正在学习OpenGL并将其与C++一起使用......我是初学者,如果这是一个愚蠢的问题,那就很抱歉.
我正在学习本教程(https://learnopengl.com/#!Getting-started/Hello-Triangle),我分割代码以创建片段着色器和顶点着色器并将其编译成单独的函数.显然这意味着一旦函数结束,对象就会超出范围,所以我尝试使用new并删除它们.
我试过这样做:
GLuint * pvertexShader; //pointer to a GLuint
pvertexShader = new GLuint;
Run Code Online (Sandbox Code Playgroud)
但是不知道如何将实际的缓冲区对象放入刚刚分配的新内存中.
我知道使用raw new/delete是不好的做法,所以我应该尝试使用智能指针吗?如果是这样,那对OpenGL的对象有什么用呢?
或者我应该创建一个包装类并将代码生成缓冲区放入类构造函数中,所以它变成这样:
class VBO;
(snip)
pvertexShader = new VBO; //the class is constructed on the heap
Run Code Online (Sandbox Code Playgroud)
据我所知,当你为一个对象调用new时,它会在堆上构造.如果我这样做,我仍然可以使用像glBindBuffer或glAttachShader通过传递指针pvertexShader而不是实际的顶点着色器的函数?所以写作glAttachShader(shaderprogram, pvertexShader).
编辑
好的,现在我发现你做的任何东西都是通过OpenGL分配到GPU上的,所以你不必使用new/delete.因为我正在做的是这样的:
SetUpVertexShader(){
//all the code to make and compile a shader
};
SetUpFragmentShader(){
//all the code to make and compile this shader
};
Run Code Online (Sandbox Code Playgroud)
然后,当我到达链接着色器和程序的阶段时,在这些函数中创建的两个着色器已超出范围(根据XCode).
我该如何预防/解决这个问题?
代码
std::string str = "Hello " "world";
std::cout << str << std::endl;
Run Code Online (Sandbox Code Playgroud)
编译和打印Hello world.同样的,
char chr[] = "abc" "def" "ghi";
std::cout << chr << std::endl;
Run Code Online (Sandbox Code Playgroud)
打印abcdefghi.这是如何以及为什么有效?