为什么C++不在同一行中实现构造+调用函数?

Ano*_*ous 5 c++

我想知道为什么C++(可能还有其他语言,我不确定)不允许这样的语句.

MyObject foo.DoBar();
Run Code Online (Sandbox Code Playgroud)

你会认为语言可以理解构造对象,然后调用函数.我认为这不起作用的唯一原因是如果对象的构造失败,语句仍然会尝试调用该函数.

那些帮助开发和集成新功能到C++(可能还有其他语言)的人不允许这样做的原因是什么?

sth*_*sth 15

可以构造一个对象并立即调用它上面的函数,如果您这样做,则无法将该对象分配给变量:

MyObject().DoBar();
Run Code Online (Sandbox Code Playgroud)

这种限制的一个实际原因是构造函数创建了对象,并且您正在调用的函数也可能具有返回值,因此您最终会得到同一语句生成的两个值.然后你需要一些特殊的语法来将这两个值分配给变量,这在其他任何地方都不会发生.

直接调用该方法可能获得的一点点便利并没有那么大的优势,值得为它引入新的语法.