C++ 为什么在这段代码中使用auto和int给出不同的答案?
我给两个变量赋值10。当我使用“int”对其中一个变量使用ref()时,我得到一个不同的值,当我使用“auto”时,我得到一个不同的值C++ 为什么在这段代码中使用auto和int给出不同的答案?,c++,c++11,C++,C++11,我给两个变量赋值10。当我使用“int”对其中一个变量使用ref()时,我得到一个不同的值,当我使用“auto”时,我得到一个不同的值 Using auto int foo(10); auto bar = std::ref(foo); ++bar; cout << foo << endl; std::cout << bar << endl << endl; Output: 11
Using auto
int foo(10);
auto bar = std::ref(foo);
++bar;
cout << foo << endl;
std::cout << bar << endl << endl;
Output: 11
11
使用自动
int foo(10);
自动条=标准::参考(foo);
++酒吧;
cout该函数创建一个对象。此对象包装对foo
的引用
与
您基本上(以间接方式)创建了对foo
的引用,在第一个示例中,对bar
的所有修改都将被修改为foo
。相当于
std::reference_wrapper<int> bar = std::ref(foo);
在第二个示例中,您还创建了这样一个引用包装器对象,但随后获取其值并将其复制到变量jar
中。然后,将销毁引用包装器对象。对jar
的所有修改仅对变量jar
本身进行,而不是对foo
进行修改。函数将创建一个对象。此对象包装对foo
的引用
与
您基本上(以间接方式)创建了对foo
的引用,在第一个示例中,对bar
的所有修改都将被修改为foo
。相当于
std::reference_wrapper<int> bar = std::ref(foo);
在第二个示例中,您还创建了这样一个引用包装器对象,但随后获取其值并将其复制到变量jar
中。然后,将销毁引用包装器对象。对jar
的所有修改只对变量jar
本身进行,而不是对foo
进行。实用程序返回类型为的对象
因此,在您的示例中:
auto bar = std::ref(foo);
bar
的类型正好是std::reference\u wrapper
。简而言之,它将作为一个引用,因此语句的效果++bar代码>将增加引用变量的值(即,foo
)
另一方面,在声明中:
int jar = std::ref(boo);
jar
作为类型int
注意:这不是一个引用,而是一个名为jar
的全新变量。当您递增jar
时,这不会影响其他变量(foo
)
附加注释:
为了完整起见,语句intjar=std::ref(boo)代码>隐藏隐式强制转换。实际上,可以将对象std::reference\u包装器
隐式转换为T&
实用程序返回类型为的对象
因此,在您的示例中:
auto bar = std::ref(foo);
bar
的类型正好是std::reference\u wrapper
。简而言之,它将作为一个引用,因此语句的效果++bar代码>将增加引用变量的值(即,foo
)
另一方面,在声明中:
int jar = std::ref(boo);
jar
作为类型int
注意:这不是一个引用,而是一个名为jar
的全新变量。当您递增jar
时,这不会影响其他变量(foo
)
附加注释:
为了完整起见,语句intjar=std::ref(boo)代码>隐藏隐式强制转换。实际上,对象std::reference\u包装器可以隐式地转换为T&
这是因为auto吗?因为使用的概念是相同的,对吗?是因为汽车吗?因为所使用的概念是相同的,对吗?