如果你对 C++ 足够熟悉,那么你可以以相对直接的方式把 C++ 程序翻译成等效的 C 程序。最早的 C++ 编译器就是这么干的。
之所以强调 相对直接,是因为在 Compiler 中,C 语言实际上相当于高级汇编,最近几年比较流行 codegen 编译到 LLVM IR,实际上更早的时候有不少是编译到 C 语言的,比如 GHC 最后一层的 IR 叫 C--,Gnome 的 Vala 也是这么干的
如果不计较这个编译过程的逻辑和复杂性,以及运行时系统的介入程度的话,JS 都可以编译到 C。对于 C++ 自己的体量和设计来说,翻译到 C 的过程(尤其是楼主所用的这个子集)是相对直接的。
详见
https://isocpp.org/wiki/faq/compiler-dependencies#convert-to-c对于一个要与 C 争市场的语言来说,“这么实现”是完全没问题的。“不太好”的反而在于楼主的用法,一般 C++ 不提倡 hack,尤其是这种会 UB 的 hack。
建议楼主可以多看看出来的汇编,还有 Inside the C++ Object Model 这种书,了解了一个特性,可以多想一步这个是怎么实现的。
这里其实有一个坑。学一门语言,我认为最重要的是一方面学它的 principle,另一方面学 application。楼主有必要在学之前了解一下 C++ 的一些基本的特点,很简单:directly mapped to hardware, 还有 zero cost abstraction。楼主如果单一地照这条路走下去,很有可能会只记得前者,而忘了后者。因为 C++ 是以 directly mapped to hardware 以及与 C 语言兼容(至少是一开始)为原则而设计的,所以可以相对简单地翻译成 C 语言,但是不代表你把 C++ 代码翻译成 C 代码没问题了,C++ 代码就没问题了。如果不明白 abstraction 那一部分,那实际上没有太多用 C++ 的意义。
如果发现自己在问 std::optional 有什么意义,Template Metaprogramming 有什么用这种问题的时候,说明该去学 Haskell 压压惊了(逃