有人向我建議,允許優化器在任何函數中自由交換參數傳遞通過const引用和參數傳遞通過值修改參數。這是C++標準允許的嗎?通過值傳遞參數時保證了複製構造函數調用
或者換句話說,在代碼
struct MyClass {
MyClass(MyClass const& mc) { std::cout << "xxx" << std::endl; }
};
void foo(MyClass mc) { }
MyClass mc;
foo(mc);
這是否 「XXX」 是永遠印在C++標準的保證嗎? (參考標準讚賞)
編譯器可以根據代碼的需要生成任何代碼。它不能奇蹟般地忽略諸如打印你的信息之類的東西,除非有明確的許可(並且只發生在一種情況下,這是複製瑕疵,並且不適用於你的情況)。 –
除非它是基本的數據類型,否則你的函數可能會修改裏面的值,我總是將const ref作爲「default」傳遞。這只是我個人的意見。 –