邪修 C++ 10 连击|模板爆炸、运行时 JIT、UB 套娃

编程狮(w3cschool.cn) 2025-08-07 11:50:06 浏览数 (149)
反馈

邪修 C++ ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

⚠️ 每条都踩 UB/UBSAN/ODR 红线,可读性 0,维护成本 ∞

面试可炫技,项目里敢用就等死!

1️⃣ 一行 main 也没有的程序

struct A { A(){ puts("邪修C++"); exit(0); } } a;

全局对象构造期直接 exit,跳过整个 CRT。

2️⃣ 模板元编程“阶乘”在编译期爆炸

template<int N> struct Fac{ enum{ value = N * Fac<N-1>::value }; };
template<> struct Fac<0>{ enum{ value = 1 }; };
constexpr auto x = Fac<20>::value;   // 编译期递归 20 层

图灵完备模板,CPU 0 负载,编译器 100% 负载。

3️⃣ SFINAE 黑魔法:真假分支同时存在

template<bool> struct tag{};
template<class T> auto f(T t, tag<true>) -> int { return t + 1; }
template<class T> auto f(T t, tag<false>) -> int { return t - 1; }
#define f(x) f(x, tag<(x > 0)>{})

宏 + 模板 + 重载,IDE 当场罢工。

4️⃣ 指针 + 位域 + 联合体重叠

union {
    struct { unsigned long long a:1, b:63; };
    unsigned long long v;
} u{ .v = 0x8000000000000000ULL };
std::cout << u.a;   // 1 或 0?平台决定

UB 大杂烩,UBSAN 直接红屏。

5️⃣ 运行时生成机器码

#include <sys/mman.h>
unsigned char code[] = {0xB8,0x2A,0x00,0x00,0x00,0xC3}; // mov eax,42; ret
void* buf = mmap(nullptr, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
                 MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memcpy(buf, code, sizeof(code));
int (*p)() = (int(*)())buf;
std::cout << p();   // 42

运行时 JIT,杀毒软件报警。

6️⃣ 双重括号初始化 + 匿名派生

std::vector<int> v = std::vector<int>({{1, 2, 3}}){};

每次创建匿名派生类,RTTI 爆炸。

7️⃣ CRTP 静态多态“元宇宙”

template<class Derived>
struct Base { void foo(){ static_cast<Derived*>(this)->impl(); } };
struct D: Base<D>{ void impl(){ puts("CRTP"); } };

不依赖虚函数,却实现多态,模板实例化膨胀。

8️⃣ 宏黑魔法:逗号运算符一行流

#define evil(x) (printf("A\n"), printf("B\n"), x)
int val = evil(42);

宏里玩副作用,调试器断点失效。

9️⃣ 三目运算符 + 逗号运算符链式地狱

int x = 1, y = 2;
int res = (x > y) ? (puts("x>y"), x) : (puts("x<=y"), y);

puts 塞进表达式,阅读体验当场去世。

🔟 异常 + noexcept 套娃

void boom() noexcept { throw 42; } // UB:noexcept 里抛异常

标准直接 UB,程序可能 std::terminate

邪修口诀

“模板撑爆编译器,指针踏穿内存墙;

UB 当特性,UBSAN 当背景音。”

PS

想要正经学习 C++ 请从编程狮的《C++ 入门课程》开始!

C++

0 人点赞