对右值的非常数引用
non-const reference to rvalue
我了解foo(const int& a)
的用法。这可以用来调用类似foo(1)
的东西,其中foo(int& a)
将失败。
现在进行实验,我创建了这个类:
class temp {
public:
int a;
temp(int x = 5) : a(x) {}
void foo_val(temp a) { /* ... */ }
void foo_ref(temp& a) { /* ... */ }
};
void main() {
temp temp1(6);
temp1.foo_val(temp1); // foo_val(temp a) is called
temp1.foo_ref(temp()); // foo_ref (temp& a) is called
}
我不明白的是temp1.foo_ref(temp())
为什么能成功。我们怎么能有一个带有右值的引用(在这种情况下是temp()
)。我原以为只有foo_ref(const temp& a)
才能成功。我是不是对右耳值想错了。
我不明白的是
temp1.foo_ref(temp())
为什么能成功。
根据void main() { ... }
的使用判断,您必须有一个旧的或不符合标准的编译器。
temp1.foo_ref(temp());
应该失败。我使用g++4.8.4得到以下错误。
g++ -Wall -std=c++11 socc.cc -o socc
socc.cc: In function ‘int main()’:
socc.cc:13:22: error: no matching function for call to ‘temp::foo_ref(temp)’
temp1.foo_ref(temp()); //foo_ref (temp& a) is called
^
socc.cc:13:22: note: candidate is:
socc.cc:6:7: note: void temp::foo_ref(temp&)
void foo_ref(temp& a){}
^
socc.cc:6:7: note: no known conversion for argument 1 from ‘temp’ to ‘temp&’
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 列出生成器(lambda的向量)会导致通过引用捕获的非常奇怪的行为
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- 一个非常弱的引用(无法转换为共享)
- 阻止const类函数在引用成员上调用非常常量类函数