小编Sva*_*erg的帖子

使用g ++和-Og选项优化的变量

当我g++使用-Og选项编译我的C++程序时,我会看到变量<optimized out>,并且当前行有时会跳过.这种行为是期望在这个优化级别,还是我有一些问题?gcc的手册页说:

-Og

优化调试体验. -Og启用不会干扰调试的优化.它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验.

因此我没想到这种行为.在我的系统上,我有g ++版本4.9.2和gdb版本7.7.1.

c++ g++ compiler-flags

18
推荐指数
1
解决办法
2261
查看次数

在字节数和"人类可读"字符串之间转换

是否有一个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进入156M13209进入13K反向?

shell

8
推荐指数
1
解决办法
2196
查看次数

犰狳的并行化

犰狳C++线性代数库文件规定的原因,发展中国家在C++库是一个"通过目前的OpenMP易于并行化的现代C++编译器",但犰狳代码不使用OpenMP的.如何获得与Armadillo并行化的好处?这是通过使用高速LAPACK和BLAS替换之一实现的吗?我的平台是Linux,Intel处理器,但我怀疑这个问题有一个通用的答案.

c++ parallel-processing blas armadillo

5
推荐指数
1
解决办法
3304
查看次数

如何处理不使用命名空间的库

在我的项目中,我必须使用其符号不在命名空间中的库.该库的类具有相当简短和通用的名称,如LoggerReader.我还在项目自己的类中使用了一些这些名称.

考虑我的项目的符号也没有命名空间的情况.可以通过将我的代码放在命名空间中并使用限定名称(例如::LoggerMy::Logger)进行区分来解决名称冲突,但我更喜欢将库的符号命名为.有什么方法可以将库的符号"强制"到我选择的命名空间中吗?

其次,如果我想使用两个定义非命名空间的不同库,该怎么办Logger?在这种情况下,有没有办法避免命名空间冲突?

c++ namespaces

4
推荐指数
1
解决办法
163
查看次数

如何在OpenGL的缓冲区对象中使用new和delete?

我正在学习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时,它会在堆上构造.如果我这样做,我仍然可以使用像glBindBufferglAttachShader通过传递指针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).

我该如何预防/解决这个问题?

c++ opengl

1
推荐指数
1
解决办法
402
查看次数

通过并置的c ++字符串文字串联

代码

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.这是如何以及为什么有效?

c++ parsing

0
推荐指数
1
解决办法
150
查看次数