当然可以, 只不过由于复制成本通常较 primitive 形态大所以一般不会用 call by value 传进去另外你后面提的方法其实很接近一种叫做 RVO 的最佳化策略在有启动 RVO 的时候, 编译器会帮你把前一段程式变成后一段你写的程式跟 RVO 的差别在于, RVO 会直接在 fun1 里初始化那个外面的物件, 而你这段程式是初始化完了才传参考进去关于 RVO 可看维基百科:
![]()
" target="_blank" rel="nofollow">
![]()
(注: RVO 是标准允许的最佳化, 即使可能因此不呼叫 ctor 等)