Skip to content

败犬日报 2024-10-30

1. 使用宏时,参数里有逗号

MACRO(std::array<int, 2>),会被当成两个参数 std::array<int2>

一般可以套个小括号搞定 MACRO((std::array<int, 2>))

如果搞不定,就要用 boost 的宏 BOOST_IDENTITY_TYPE(或者参考它的实现)。

2. 白嫖服务器

aws 注册送 1c1g 一年。

3. 拼接多个字符串,怎么做性能高

一般 += 拼接性能已经足够,std::string 的扩容机制提供了一定的 buffer。

如果还要更高,就考虑先计算最终字符串长度并一次性申请内存,然后 memcpy / strcpy。

参考 https://abseil.io/docs/cpp/guides/strings#abslstrcat

编译器能优化吗?非常有限,std::string 带副作用不能很好优化。

4. 调用成员函数报错:不完整类型

cpp
struct S;
S* f();

int main() {
    S* s = f();
    s->abc();  // Member access into incomplete type 'S'
}

结构体 S 前置声明,但没有定义,也就没有 abc 函数签名,无法调用。大概率是没 include 对应的头文件,include 了就行。

前置声明有什么用:加速编译,解决类的循环依赖,隔离实现。

5. 错误处理用 errcode + goto?

C 这么写比较常见。