https://s3.ax1x.com/2021/01/21/s4crsU.png

BBing's Blog

Hello, Good Hunter

通过返回值'重载'函数

以下的代码片段涉及到了不少的模板函数, 可以自行去官网查询.

前言

从实际问题出发, 期望开发一个函数, 可以计算另外一个函数的耗时; 比如测试下面函数的耗时

1
2
int funcA(int &a, float &b);
void funcB(bool &c, char &d, double &e);

期望可以这样调用:

1
2
(cost, ret) = costTime(funcA, a, b);
cost = costTime(funcB, c, d, e);

C++模板问题之多出的static

问题

先看以下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>

using namespace std;
using uint32 = unsigned int;

template<bool ISIN>
static void updateVal(uint32 &val)
{
    static uint32 sval;

    if (ISIN)
    {
        sval = val;
    }
    else
    {
        val = sval;
    }
}

int main()
{
    uint32 a = 1;
    uint32 b = 2;

    updateVal<true>(a);
    updateVal<false>(b);

    cout << b << endl;
}

Git的目录结构

git目录

新建一个git项目,查看.git目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

9 directories, 15 files

开始使用Docker

docker安装

1
2
3
4
wget -qO- https://get.docker.com/ | sh
# 或者 apt install docker.io
docker --version
docker system info

如果遇到permission的问题,则将当前用户添加到用户组,并且之后要记得重新登录(注销当前用户)

1
2
3
4
5
$ sudo groupadd docker #创建docker用户组
$ sudo usermod -aG docker ${USER} #将当前用户加入docker用户组
$ sudo systemctl restart docker #重启docker服务
$ su root #切换到root用户,或注销再登录当前用户
$ su ${USER} #再切换到原来的应用用户以上配置才生效

值传递OR引用传递

目的

验证值传递和引用传递的区别。

  • 值传递会拷贝,引用传递不会拷贝;
  • 如果类是禁止拷贝的,就不能使用值传递;
  • C++推荐使用引用传递;

C++容器操作

问题

  • 容器存指针,调用erase、clear是否会调用元素的析构函数?
    • 不会调用析构函数
  • 容器存类(非指针),是否会调用构造拷贝函数?使用erase、clear是否会调用析构函数?
    • 会调用拷贝构造函数
    • 会调用析构函数

Union可以怎么用

union 改名操作

比如以下这个类,我期望外部不仅能通过P1这个名字访问P1这个成员变量,也能通过Y/R等名字访问他的P1。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
template<typename T = UCHAR>
class __P3F__
{
public:
    union{
        struct{
            T P1, P2, P3;
        };
        struct{
            T Y, U, V;
        };
        struct{
            T R, G, B;
        };
        struct{
            T H, L, S;
        };
    };

public:
    __P3F__(const T &_P1, const T &_P2, const T &_P3) : P1(_P1), P2(_P2), P3(_P3) {}
    __P3F__() : P1(0), P2(0), P3(0) {}
    virtual ~__P3F__() {}

    VOID operator=(const __P3F__ &p3f)
    {
        P1 = p3f.P1;
        P2 = p3f.P2;
        P3 = p3f.P3;
    }
};
template<typename T = UCHAR>
using YUV = __P3F__<T>;
template<typename T = UCHAR>
using RGB = __P3F__<T>;
template<typename T = UCHAR>
using HLS = __P3F__<T>;