小编Pen*_*ang的帖子

Bash命令用于在必要时创建新文件及其父目录

使用-p(--parents)选项,mkdir根据需要创建父目录.

touch, vim或者>可以在bash中创建新文件,但仅限于父目录存在时.

如何在一个命令中创建新文件及其父目录?就像什么-p做的mkdir

bash shell

19
推荐指数
2
解决办法
1万
查看次数

什么是.LFB .LBB .LBE .LVL .loc在编译器生成的汇编代码中

当我查看GCC生成的汇编代码时,有许多行开头.LBB和一个数字.似乎它们不是操作指令.更像是标记文件的内容或什么.

是什么.LFB,.LVL,LBB,LBE等是在编译器生成的汇编代码? .loc是否意味着"代码行".那些线条只是表明了symbol table吗?

这是一段代码,

main:
.LFB1:
  .loc 1 8 0
  .cfi_startproc
.LVL2:
.LBB4:
.LBB5:
  .loc 1 2 0
  movsd b(%rip), %xmm0
.LBE5:
.LBE4:
  .loc 1 10 0
  xorl  %eax, %eax
.LBB7:
.LBB6:
  .loc 1 2 0
  mulsd a(%rip), %xmm0
.LBE6:
.LBE7:
  .loc 1 9 0
  movsd %xmm0, a(%rip)
.LVL3:
  .loc 1 10 0
  ret
  .cfi_endproc
Run Code Online (Sandbox Code Playgroud)

c assembly gcc

15
推荐指数
2
解决办法
5018
查看次数

创建线程时设置CPU关联

我想创建一个C++ 11线程,我希望它在我的第一个核心上运行.我发现pthread_setaffinity_np并且sched_setaffinity可以更改线程的CPU亲和性并将其迁移到指定的CPU.但是,在线程运行后,此关联性规范会发生更改.

如何创建具有特定CPU关联(cpu_set_t对象)的C++ 11线程?

如果在初始化C++ 11线程时无法指定关联,那么如何pthread_t在C中执行?

我的环境是Ubuntu上的G ++.一段代码表示赞赏.

c c++ multithreading pthreads c++11

13
推荐指数
3
解决办法
1万
查看次数

为什么dereference运算符在C++中保留多态(后期绑定)?

众所周知,"只有在通过引用或指针进行调用时才能在运行时解析虚拟 ." 因此,当我发现取消引用运算符也保持动态绑定功能时,令我惊讶的是.

#include <iostream>
using namespace std;

struct B {
  virtual void say() { cout << "Hello B" << endl; }
};

struct D : B {
  void say() override { cout << "Hello D" << endl; }
};

int main() {
    D *ptr = new D();
    B *p = ptr;
    (*p).say();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

Hello D
Run Code Online (Sandbox Code Playgroud)

问题:编译器处理解除引用运算符*的是什么?

我以为它是在编译时完成的.因此,当编译器使用指针p时,它应该假定p指向类型B的对象.例如,下面的代码

D temp = (*p);
Run Code Online (Sandbox Code Playgroud)

抱怨

error: no viable conversion from 'B' to 'D'
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

8
推荐指数
2
解决办法
956
查看次数

为什么C++运算符重载需要"至少有一个类类型的参数"?

"C++入门第5版"第14.1章读到,

运算符函数必须是类的成员或至少具有一个类类型的参数.

例如,string("hello")+"world"编译"hello"+"world"没有.当我想重载+两个C字符串时.

std::string operator+ (const char* s1, const char* s2)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

错误:'std :: string operator +(const char*,const char*)'必须具有类或枚举类型的参数

我有两个问题.

  1. 这个限制是语言规范的一部分吗?如果是,为什么C++设计师想要这样做呢?

  2. std::string具有构造类似string (const char* s);,这意味着编译器可以做隐含类型转换char*string.当我们调用时"hello"+"world",为什么编译器不会将两个char*"s" 转换为两个字符串?毕竟,在两个std :: strings上存在重载"+". string operator+ (const string& lhs, const string& rhs);

c++ operator-overloading c++11

7
推荐指数
3
解决办法
6713
查看次数

在编译时确定字节序的便携/标准方法

请不要将此标记为重复.该建议后重复实际上是在说有关运行时决定.最重要的是,那里的答案都没有回答我的问题.

我需要uint16_t用C/C++中的两个字节读取一个.所以,我需要决定我的代码编译的平​​台的endian格式.我目前在GNU C扩展中使用宏.

// 'size' is 'uint16_t' and read from big-endian format. 
// So if the platform is little-endian, I need to flip the btyes.
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__    
     size = ( size << 8 ) | ( size >> 8 );
#endif
Run Code Online (Sandbox Code Playgroud)

性能在我的用例中至关重要,因此ntohshtons不适合我.我需要在预处理时间内进行这种endian检查.

题.是否有标准方法(语言标准)来进行预处理?

c c++

7
推荐指数
0
解决办法
168
查看次数

如何判断两个LARGE unordered_map是否相等?

给定两个大的unordered_map,比如map_a,map_b.如何有效地决定map_a与map_b具有相同的信息?例如,如果map_a是{'a':3, 'b':2}和map_b {'a':3,'b':2}那么它们是相同的.也就是说,对于map_a中的每个密钥k,map_a [k] = map_b [k].

我的问题是如何有效地决定这个问题.我知道最糟糕的时间是O( max{map_a.size(), map_b.size()} ).但有一些观察结果可以很快决定map_a不等同于map_b.例如,map_a.size()!= map_b.size().

还有其他观察结果吗?我们可以使用bucket_count()和bucket_size()吗?

Wlog,我们假设map_a和map_b具有相同的散列函数和(键,值)类型.

c++ stl

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

设置IndentWidth不能以clang格式工作

.clang-format在我的主目录中并设置indentwidth 4如下.

BasedOnStyle:  LLVM
Standard:        Cpp11
IndentWidth:     4   
TabWidth:        4   
UseTab:          Never 
Run Code Online (Sandbox Code Playgroud)

但当我clang-format -style='~/.clang-format' a.cpp用来格式化我的代码时,缩进宽度变为2.喜欢:

// See this indent width 2. The original file has width 4, 
// but clang-format changes it to width 2.
int main(int argc, char const *argv[]) {
  A a;  
  a.bar();
Run Code Online (Sandbox Code Playgroud)

clang-format --version的输出是

LLVM (http://llvm.org/):
  LLVM version 3.4.2
  Optimized build.
  Default target: x86_64-unknown-linux-gnu
  Host CPU: core-avx-i
Run Code Online (Sandbox Code Playgroud)

如何让clang格式格式化我的代码(.h,.c,..),缩进宽度为4?

c++ clang-format

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

哪里可以轻松找到C标准函数原型

在像Visual Studio这样的IDE中编写C#时,"跳转到定义或声明"非常方便.这样我们就可以轻松了解函数/ API的原型/接口.

问题: 有没有简单的方法来查找标准C函数原型?像数据库或函数声明的索引,或网站提供按函数名称或*NIX命令搜索?

在VIM中工作/集成的解决方案非常棒.

如果您推荐下载源代码然后grep,您是否可以提供返回更准确结果的grep命令.因为grep可能会返回具有该函数名称的所有行.

c linux

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

python从二进制文件读取16个字节的长双

我发现python struct.unpack()非常方便读取其他程序生成的二进制数据.

问题:如何从二进制文件中读取16字节长的双倍内容

以下C代码将1.01写入三次到二进制文件,分别使用4字节浮点数,8字节双精度数据块和16字节长双精度值.

FILE* file     = fopen("test_bin.bin","wb");
float f        = 1.01;
double d       = 1.01;
long double ld = 1.01;
fwrite(&f, sizeof(f),1,file);
fwrite(&d, sizeof(d),1,file);
fwrite(&ld, sizeof(ld),1,file);                     
fclose(file);
Run Code Online (Sandbox Code Playgroud)

在python中,我可以读取float和double,没有问题.

file=open('test_bin.bin','rb')
struct.unpack('<fd',file.read(12)) # (1.0099999904632568, 1.01) as expected.
Run Code Online (Sandbox Code Playgroud)

我没有在模块struct 格式字符部分找到16字节长双精度的描述.

python

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