私は Eckel の定数の章を読んでいて、Temporaries が説明されている部分で混乱しました。私が得ることができたのは、関数への参照を渡すと、コンパイラは const オブジェクトである一時オブジェクトを作成するため、参照を次のように渡しても変更できないということでした。
f(int &a){}
ここで、Temporaries の他のリファレンスをオンラインで調べようとしましたが、行き詰まりました
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage %2Fref%2Fcplr382.htmおよび
C++ ではすべての一時変数は右辺値ですか?
これにより、一時変数は関数内で参照を渡し、そのための const オブジェクトを作成するだけではないことがわかりました。これで、これら 2 つのリンクから何かを得ることができましたが、一時変数としての動作、機能、および使用法を理解しているとは言えませんでした。全体。誰かが一時的な概念を説明できれば、本当に役に立ちます。前もって感謝します。
ブルース・エッケルの元の例は次のとおりです。
// Result cannot be used as an lvalue
class X {
int i;
public:
X(int ii = 0);
void modify();
};
X::X(int ii) { i = ii; }
void X::modify() { i++; }
X f5() {
return X();
}
const X f6() {
return X();
}
void f7(X& x) { // Pass by non-const reference
x.modify();
}
int main() {
f5() = X(1); // OK -- non-const return value
f5().modify(); // OK
// Causes compile-time errors:
//! f7(f5());
//! f6() = X(1);
//! f6().modify();
//! f7(f6());
} ///:~