邪修 C++ ,10 段“千萬別上生產(chǎn)”的黑魔法代碼
——僅供技術(shù)獵奇,切勿真用!
?? 每條都踩 UB/UBSAN/ODR 紅線,可讀性 0,維護成本 ∞
面試可炫技,項目里敢用就等死!
1?? 一行 main
也沒有的程序
struct A { A(){ puts("邪修C++"); exit(0); } } a;
全局對象構(gòu)造期直接
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 負(fù)載,編譯器 100% 負(fù)載。
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 當(dāng)場罷工。
4?? 指針 + 位域 + 聯(lián)合體重疊
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}}){};
每次創(chuàng)建匿名派生類,RTTI 爆炸。
7?? CRTP 靜態(tài)多態(tài)“元宇宙”
template<class Derived>
struct Base { void foo(){ static_cast<Derived*>(this)->impl(); } };
struct D: Base<D>{ void impl(){ puts("CRTP"); } };
不依賴虛函數(shù),卻實現(xiàn)多態(tài),模板實例化膨脹。
8?? 宏黑魔法:逗號運算符一行流
#define evil(x) (printf("A\n"), printf("B\n"), x)
int val = evil(42);
宏里玩副作用,調(diào)試器斷點失效。
9?? 三目運算符 + 逗號運算符鏈?zhǔn)降鬲z
int x = 1, y = 2;
int res = (x > y) ? (puts("x>y"), x) : (puts("x<=y"), y);
把
puts
塞進表達式,閱讀體驗當(dāng)場去世。
?? 異常 + noexcept 套娃
void boom() noexcept { throw 42; } // UB:noexcept 里拋異常
標(biāo)準(zhǔn)直接 UB,程序可能
std::terminate
。
邪修口訣
“模板撐爆編譯器,指針踏穿內(nèi)存墻;
UB 當(dāng)特性,UBSAN 當(dāng)背景音?!?/p>
PS
想要正經(jīng)學(xué)習(xí) C++ 請從編程獅的《C++ 入門課程》開始!