看板 C_and_CPP 關於我們 聯絡資訊
http://coliru.stacked-crooked.com/a/fba5b7b3b253288d #include <iostream> #include <string> struct table { std::string s; table() {} ~table() { std::cout << this->s; } table(const int n) : s{std::to_string(n)} {} table(std::string&& s_) : s{std::move(s_)} {} table(table&& other) : s{other.take()} {} table operator=(const int n) { return this->take() + " = " + std::to_string(n); } table operator=(table&& rhs) { return this->take() + " = " + rhs.take(); } std::string take() { const auto s = this->s; this->s.clear(); return s; } bool empty() const { return this->s.empty(); } const char& back() const { return this->s.back(); } }; table operator++(table&& t, int) { return t.take(); } table operator--(table&& t, int) { return t.take(); } table operator-(table&& lhs, table&& rhs) { return lhs.take() + rhs.take(); } table operator*(table&& lhs, table&& rhs) { return lhs.take() + " x " + rhs.take(); } table operator||(table&& lhs, table&& rhs) { return lhs.take() + "\t" + rhs.take(); } table operator|(table&& lhs, table&& rhs) { return lhs.empty() || lhs.back() == '\n' ? lhs.take() + rhs.take() : lhs.take() + "\n" + rhs.take(); } table operator/(table&& lhs, table&& rhs) { return lhs.take() + "\n\n" + rhs.take(); } #define x * (table) #define o table{} int main() { o-------------------------------------------------------o | 2 x 1 = 2 || 3 x 1 = 3 || 4 x 1 = 4 || 5 x 1 = 5 \ | 2 x 2 = 4 || 3 x 2 = 6 || 4 x 2 = 8 || 5 x 2 = 10 \ | 2 x 3 = 6 || 3 x 3 = 9 || 4 x 3 = 12 || 5 x 3 = 15 \ | 2 x 4 = 8 || 3 x 4 = 12 || 4 x 4 = 16 || 5 x 4 = 20 \ | 2 x 5 = 10 || 3 x 5 = 15 || 4 x 5 = 20 || 5 x 5 = 25 \ | 2 x 6 = 12 || 3 x 6 = 18 || 4 x 6 = 24 || 5 x 6 = 30 \ | 2 x 7 = 14 || 3 x 7 = 21 || 4 x 7 = 28 || 5 x 7 = 35 \ | 2 x 8 = 16 || 3 x 8 = 24 || 4 x 8 = 32 || 5 x 8 = 40 \ | 2 x 9 = 18 || 3 x 9 = 27 || 4 x 9 = 36 || 5 x 9 = 45 / o------------++------------++------------++-------------o | 6 x 1 = 6 || 7 x 1 = 7 || 8 x 1 = 8 || 9 x 1 = 9 \ | 6 x 2 = 12 || 7 x 2 = 14 || 8 x 2 = 16 || 9 x 2 = 18 \ | 6 x 3 = 18 || 7 x 3 = 21 || 8 x 3 = 24 || 9 x 3 = 27 \ | 6 x 4 = 24 || 7 x 4 = 28 || 8 x 4 = 32 || 9 x 4 = 36 \ | 6 x 5 = 30 || 7 x 5 = 35 || 8 x 5 = 40 || 9 x 5 = 45 \ | 6 x 6 = 36 || 7 x 6 = 42 || 8 x 6 = 48 || 9 x 6 = 54 \ | 6 x 7 = 42 || 7 x 7 = 49 || 8 x 7 = 56 || 9 x 7 = 63 \ | 6 x 8 = 48 || 7 x 8 = 56 || 8 x 8 = 64 || 9 x 8 = 72 \ | 6 x 9 = 54 || 7 x 9 = 63 || 8 x 9 = 72 || 9 x 9 = 81 / o-------------------------------------------------------o; } ------------------------------------------------------------------------------ $ g++ -std=c++17 -Wall -Wextra -pedantic -O2 -Wno-parentheses main.cpp && ./a.out 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81 靈感來源: Multi-Dimensional Analog Literals http://www.eelis.net/C++/analogliterals.xhtml -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.193.217 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1531774190.A.3C0.html
cutekid: 猛猛的! 07/17 10:37
MOONRAKER: 太棒了這樣code和document和result都合一了(?) 07/17 15:30
shadow0326: specification by example 07/17 15:58
Schottky: 所見即所得 07/17 16:31
lucky1lk: 強 給推 未必有人看得懂XDDD 07/17 16:50
descent: 看不懂 07/17 17:07
BlazarArc: XDDDDDDDDDD 07/17 23:47
lc85301: 猛XDD 07/20 00:32
dou0228: 比 template 好懂多了 XDD 07/23 08:42