當然可以, 只不過由於複製成本通常較 primitive 形態大所以一般不會用 call by value 傳進去另外你後面提的方法其實很接近一種叫做 RVO 的最佳化策略在有啟動 RVO 的時候, 編譯器會幫你把前一段程式變成後一段你寫的程式跟 RVO 的差別在於, RVO 會直接在 fun1 裡初始化那個外面的物件, 而你這段程式是初始化完了才傳參考進去關於 RVO 可看維基百科:
![]()
" target="_blank" rel="nofollow">
![]()
(註: RVO 是標準允許的最佳化, 即使可能因此不呼叫 ctor 等)