在适用性方面,如果 "const int &i" 和 "const int i" 都使用 literal/expression 进行初始化,那么它们有何不同?
When it comes to applicability, how is "const int &i" different from "const int i" if they're both initialized with a literal/expression?
我对 C++ 还是很陌生,但到目前为止对我来说,两者在适用性方面似乎没有区别。我知道的唯一区别是,只要用文字或表达式初始化,对 const 对象的引用就会绑定到一个临时对象。
但是,只要绑定到它的引用存在,临时变量就存在,如果它们都由 literal/expression 初始化,那么对 const 的引用和 const 变量之间似乎没有适用的区别.
那么有没有什么情况你只能,或者宁愿选择一个而不是另一个?
没有区别。
假设引用是 "another name for constant or variable".
在函数范围内,没有区别。临时绑定到引用将存在,直到函数 returns.
但是,对于 class 成员,当相关函数 returns 时,引用仍将被销毁,并且相关函数是 构造函数 - 而不是析构函数!构造函数进行初始化,因此临时对象仅存在于构造函数中。
如果您有 const int
成员,当然可以正常工作。
const int &i
表示 i
引用另一个 int
,无法通过此引用 修改 。但是,可以在其他地方修改该 int。
例如:
int j = 5;
const int &i = j;
const int k = 5;
cout << i << "," << k << endl; // same
j = 6;
cout << i << "," << k << endl; // different
你是对的,演员 const int &i = 5;
与 const int i = 5;
非常相似。然而,对于 class 类型,相似性逐渐消失。
我对 C++ 还是很陌生,但到目前为止对我来说,两者在适用性方面似乎没有区别。我知道的唯一区别是,只要用文字或表达式初始化,对 const 对象的引用就会绑定到一个临时对象。
但是,只要绑定到它的引用存在,临时变量就存在,如果它们都由 literal/expression 初始化,那么对 const 的引用和 const 变量之间似乎没有适用的区别.
那么有没有什么情况你只能,或者宁愿选择一个而不是另一个?
没有区别。 假设引用是 "another name for constant or variable".
在函数范围内,没有区别。临时绑定到引用将存在,直到函数 returns.
但是,对于 class 成员,当相关函数 returns 时,引用仍将被销毁,并且相关函数是 构造函数 - 而不是析构函数!构造函数进行初始化,因此临时对象仅存在于构造函数中。
如果您有 const int
成员,当然可以正常工作。
const int &i
表示 i
引用另一个 int
,无法通过此引用 修改 。但是,可以在其他地方修改该 int。
例如:
int j = 5;
const int &i = j;
const int k = 5;
cout << i << "," << k << endl; // same
j = 6;
cout << i << "," << k << endl; // different
你是对的,演员 const int &i = 5;
与 const int i = 5;
非常相似。然而,对于 class 类型,相似性逐渐消失。