[英]Where is this rvalue residing if its lifetime is prolonged by const reference?
我已经阅读了以下问题:
并根据答案:
int main()
{
int a = 7; // 7 rvalue is stored in the program binary and assigned to "a"
int b = 7 * rand(); // 7 is pulled from the program binary, multiplied by result of rand and assigned to "b"
// But...
const int& c = 3; // 3 is an rvalue?
const_cast<int&>(c) = 1; // rvalues don't have storage space? But I'm assigning to it.
std::cout << c; // Prints 1
}
我想了解,通常一个右值临时(等号的右侧)在内存中没有存储空间,并且其生存期在该行的结尾处结束。 如果我们将const引用绑定到它,则它将rvalue的生存期扩展到它绑定到的引用的生存期。 在分配给数字文字“ 3”的情况下,这是否意味着它确实获得了一些存储空间并且不是右值? 还是右值?
我也想知道我所做的是否是未定义的行为,而不管const_cast是不可取的还是其他原因。
通常,右值临时(等号右侧)在内存中没有存储空间
通常它有一个存储空间,您应该在这里误解了一些概念。
在分配给数字文字“ 3”的情况下,这是否意味着它确实获得了一些存储空间并且不是右值? 还是右值?
两者:这是一个右值,它有一个存储空间。 堆栈上有一个空间分配给存储空间 ,并且整数值为3
,然后c
绑定到该变量。
关于您的代码:
const int& c = 3; // 3 is an rvalue?
是的,它是右值。
const_cast<int&>(c) = 1; // rvalues don't have storage space? But I'm assigning to it.
std::cout << c; // Prints 1
从const_cast :
const_cast使得可以形成实际上指向const对象的非const类型的引用或指针,或者实际上指向易失性对象的非volatile类型的引用或指针。 通过非常量访问路径修改const对象,并通过非易失性glvalue引用volatile对象会导致未定义的行为 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.