gpt4 book ai didi

c++ - 右值总是不变的吗?

转载 作者:可可西里 更新时间:2023-11-01 17:14:17 25 4
gpt4 key购买 nike

int i = 5;

int j = i;

这个表达式中的右值 i 在计算结果时会是一个常量吗?

我问这个问题是因为在我的复制构造函数中它的参数需要一个 const

最佳答案

对于左值/右值术语存在一种常见的误解。它们不引用变量,而是引用表达式。表达式可以产生左值或右值,并且可以是常量或非常量。

特别是,在您的代码中,定义 int j = i; 右侧的表达式 i 是左值表达式,而不是右值。出于赋值的目的,有一个左值到右值的转换,然后将其分配给新声明的变量。

Cont-ness 是一个正交概念——在大多数情况下——它与你是否可以改变你正在处理的对象有关。

int f();
int& g();
const int& h();
const int k();

int main() {
f(); // non-const rvalue expression
g(); // non-const lvalue expression
h(); // const lvalue expression
k(); // const rvalue expression
f() = 5; // error, cannot assign to an rvalue
g() = 5; // correct, can modify a non-const lvalue
h() = 5; // error, cannot modify a constant lvalue
}

其他示例需要使用用户定义的类型:

struct test {
void foo() { x = 5; }
void bar() const;
int x;
};
test f();
const test g();
int main() {
f().foo(); // f() is a non-const rvalue,
// but you can call a method on the resulting object
g().foo(); // g() is a const rvalue,
// you cannot call a mutating member function
g().bar(); // but you can call a const member function
}

关于c++ - 右值总是不变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154819/

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