败犬日报 2024-10-30
1. 使用宏时,参数里有逗号
MACRO(std::array<int, 2>)
,会被当成两个参数 std::array<int
和 2>
。
一般可以套个小括号搞定 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 这么写比较常见。