C++中能否不声明output变量直接打印库函数compute的输出?
可行的解决方案
因为原compute函数是通过引用参数返回结果且无法修改,我们可以用以下几种方式实现不用预先声明output变量直接输出:
方法1:用立即执行的Lambda表达式(C++11及以上)
直接在输出语句里写一个临时Lambda,内部完成变量声明、函数调用和结果返回:
#include <iostream> class myClass { public: void compute(int& x, int& y) { y = 2*x; } }; int main() { int input = 5; myClass myobj; // 直接在cout中使用Lambda std::cout << "Result is: " << [&](){ int out; myobj.compute(input, out); return out; }() << std::endl; return 0; }
Lambda里的[&]是捕获外部的myobj和input,后面的()是让Lambda立即执行,返回计算后的结果,直接嵌入到输出流中。
方法2:自定义包装函数(所有C++版本兼容)
如果不想用Lambda,可以自己写一个包装函数,把原compute的引用返回逻辑封装成返回值的形式:
#include <iostream> class myClass { public: void compute(int& x, int& y) { y = 2*x; } }; // 自定义包装函数 int wrap_compute(myClass& obj, int x) { int result; obj.compute(x, result); return result; } int main() { int input = 5; myClass myobj; // 使用包装函数直接输出 std::cout << "Result is: " << wrap_compute(myobj, input) << std::endl; return 0; }
这个包装函数完全不修改原库的compute函数,只是做一层封装,调用起来更符合你想要的直接输出的需求。
为什么你的伪代码语法不存在?
C++本身没有像你写的output <- myobj.compute(input, output)这种直接在表达式里赋值并返回变量的语法,因为原函数是void返回,无法直接链式调用。上面两种方法都是通过封装逻辑,实现了不用提前声明变量就能输出结果的效果。
内容的提问来源于stack exchange,提问作者Tetix
相关产品推荐
相关产品推荐

