小编Scy*_*Scy的帖子

c ++包含不同的头文件,在多个源文件中具有相同的类实现

例如

class Dummy {
public:
  Dummy() { std::cout << "a.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

BH

class Dummy {
public:
  Dummy() { std::cout << "b.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

c.cc

#include "a.h"

void test() {
  Dummy a;
}
Run Code Online (Sandbox Code Playgroud)

d.cc

#include "b.h"

int main() {
  Dummy a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后使用命令编译源文件

g++ d.cc c.cc
Run Code Online (Sandbox Code Playgroud)

输出是

b.h
Run Code Online (Sandbox Code Playgroud)

但是有了命令

g++ c.cc d.cc
Run Code Online (Sandbox Code Playgroud)

输出是

a.h
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么没有multiple definition错误以及为什么输出取决于编译的顺序?

c++ compilation g++ one-definition-rule

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

在x86_64平台上是否需要rdtsc的mfence?

unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
    "mfence;rdtsc" : "=a"(lo), "=d"(hi) : : "memory"
);
Run Code Online (Sandbox Code Playgroud)

mfence 在上面的代码中,是否有必要?

根据我的测试,找不到cpu重新排序.

测试代码片段包含在下面.

inline uint64_t clock_cycles() {
    unsigned int lo = 0;
    unsigned int hi = 0;
    __asm__ __volatile__ (
        "rdtsc" : "=a"(lo), "=d"(hi)
    );
    return ((uint64_t)hi << 32) | lo;
}

unsigned t1 = clock_cycles();
unsigned t2 = clock_cycles();
assert(t2 > t1);
Run Code Online (Sandbox Code Playgroud)

c++ linux timestamp x86-64

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

如何将字符串与变量连接到Bash中的新变量?

我有这样的shell脚本,

#!/bin/bash
foxy1="foxyserver"
H="1"
Run Code Online (Sandbox Code Playgroud)

输出应该是foxyserver.

我试过这个,

echo $foxy$H
Run Code Online (Sandbox Code Playgroud)

这给了我

1
Run Code Online (Sandbox Code Playgroud)

然后我用了

str="foxy$H"
echo $str
Run Code Online (Sandbox Code Playgroud)

输出是

foxy1
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

bash shell

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

标签 统计

c++ ×2

bash ×1

compilation ×1

g++ ×1

linux ×1

one-definition-rule ×1

shell ×1

timestamp ×1

x86-64 ×1