使用-p
(--parents
)选项,mkdir
根据需要创建父目录.
touch
, vim
或者>
可以在bash中创建新文件,但仅限于父目录存在时.
如何在一个命令中创建新文件及其父目录?就像什么-p
做的mkdir
当我查看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++ 11线程,我希望它在我的第一个核心上运行.我发现pthread_setaffinity_np
并且sched_setaffinity
可以更改线程的CPU亲和性并将其迁移到指定的CPU.但是,在线程运行后,此关联性规范会发生更改.
如何创建具有特定CPU关联(cpu_set_t
对象)的C++ 11线程?
如果在初始化C++ 11线程时无法指定关联,那么如何pthread_t
在C中执行?
我的环境是Ubuntu上的G ++.一段代码表示赞赏.
众所周知,"只有在通过引用或指针进行调用时才能在运行时解析虚拟 ." 因此,当我发现取消引用运算符也保持动态绑定功能时,令我惊讶的是.
#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++入门第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*)'必须具有类或枚举类型的参数
我有两个问题.
这个限制是语言规范的一部分吗?如果是,为什么C++设计师想要这样做呢?
std::string
具有构造类似string (const char* s);
,这意味着编译器可以做隐含类型转换char*
到string
.当我们调用时"hello"+"world"
,为什么编译器不会将两个char*
"s" 转换为两个字符串?毕竟,在两个std :: strings上存在重载"+".
string operator+ (const string& lhs, const string& rhs);
请不要将此标记为重复.该建议后重复实际上是在说有关运行时决定.最重要的是,那里的答案都没有回答我的问题.
我需要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)
性能在我的用例中至关重要,因此ntohs
或htons
不适合我.我需要在预处理时间内进行这种endian检查.
题.是否有标准方法(语言标准)来进行预处理?
给定两个大的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具有相同的散列函数和(键,值)类型.
我.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?
在像Visual Studio这样的IDE中编写C#时,"跳转到定义或声明"非常方便.这样我们就可以轻松了解函数/ API的原型/接口.
问题: 有没有简单的方法来查找标准C函数原型?像数据库或函数声明的索引,或网站提供按函数名称或*NIX命令搜索?
在VIM中工作/集成的解决方案非常棒.
如果您推荐下载源代码然后grep
,您是否可以提供返回更准确结果的grep命令.因为grep
可能会返回具有该函数名称的所有行.
我发现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)