我需要自动从某种语言翻译成 C++。源语言具有Statement Exprs的等价物,我在标准 C++(实际上是 C++11)上复制它时遇到了很多困难。
起初我考虑了 lambdas,但结果非常难看(lambdas 中的 lambdas 中的 lambdas...),并且在应用于大型源时可能会使编译器陷入困境。
我怎样才能复制那个 GNU 扩展?必须维护有关构造/销毁/复制/等的语义,因此翻译如下:
Foo foo( { ... declarations and statements ... } );
进入这个:
Foo foo;
... declarations and statements ...
foo = last result;
不正确(因为Foo
使用默认构造函数构造然后分配,而不是使用语句块的最后一个值构造。此外,在语句块内创建的对象在每种情况下都有不同的生命周期。)
请注意,这个问题也适用于使用该扩展的程序需要翻译成标准 C++ 的情况。