gpt4 book ai didi

c++ - 通过引用传递值的引用

转载 作者:行者123 更新时间:2023-11-28 06:58:58 25 4
gpt4 key购买 nike

不知何故,我开始尝试理解 C++,但对“未定义”、“未指定”感到困惑。

引用资料已被广泛记录,但我没有找到我的“特定”问题的答案。

通过引用传递值的引用呢?

我已经用下面的代码对此进行了测试:

#include <iostream>

int func(int& a)
{
int b=a;
++b;
std::cout << "[func] b: " << b << std::endl;
return b;
}

int func2(int& a)
{
int& b=a;
++b;
std::cout << "[func2] b: " << b << std::endl;
return b;
}

int main()
{
int a=1;
std::cout << "a: " << a << std::endl;
func(a);
std::cout << "a after func: " << a << std::endl;
func2(a);
std::cout << "a after func2: " << a << std::endl;
return 0;
}

得到输出:

a: 1
[func] b: 2
a after func: 1
[func2] b: 2
a after func2: 2

它似乎符合我的预期,但这是标准规定的行为吗?

最佳答案

来自最新的公共(public)标准草案,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf :

8.5.3 References [dcl.init.ref] 1 A variable declared to be a T& or T&&, that is, “reference to type T” (8.3.2), shall be initialized by an object, or function, of type T or by an object that can be converted into a T. [ Example:

int g(int);  
void f() {
int i;
int& r = i; // r refers to i
r = 1; // the value of i becomes 1
int* p = &r; //p points to i
int& rr = r; // rr refers to what r refers to, that is, to i
[...]

因此,虽然句子可能让人不确定(这里相关的部分可能是引用“可以转换为 T”),但示例(最后一行在这里相关)是明确的。

关于c++ - 通过引用传递值的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com