加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

常数为C(11)

发布时间:2020-12-16 05:35:29 所属栏目:百科 来源:网络整理
导读:为什么const int不是C(11)中的R值?我认为R值是“任何东西”,不能在左边,常数也是这样.此代码失败: int f(int x) { return 100; }void g() { const int x = 1; f(x);}error: invalid initialization of reference of type ‘int’ from expressionof type
为什么const int不是C(11)中的R值?我认为R值是“任何东西”,不能在左边,常数也是这样.此代码失败:
int f(int && x) { return 100; }

void g() {
  const int x = 1;
  f(x);
}

error: invalid initialization of reference of type ‘int&&’ from expression
of type ‘const int’

解决方法

好的,有三类表达式1:

>代表具有身份并且无法移动的对象的那些;
>代表具有身份并可以移动的对象的那些;
>代表不具有身份并可以移动的对象的那些;

第一个被称为左值,第二个是左值,第三个是左值.如果我们把lvalues和xvalues放在一起,我们就会有gl.. Glvalues是表示具有身份的对象的所有表达式.如果我们把x值和prvalues放在一起,我们就有价值. Rvalues是表示可以移动的对象的所有表达式.

有问题的表达式x是一个愚蠢的:可以写& x,所以对象显然有一个身份.

我们可以从这个表达中移开吗?这个对象即将过期吗?不它不是.它只会在当前表达式的某个时间过期.这意味着它不能被移开.这使它成为一个左派.

所有这些名字可能有点混乱,因为C中的左值和右值不再意味着它们在C起源中的含义. C意义与分配的左侧或右侧完全无关2.

个人而言,我喜欢使用Bjarne的this paper中的术语:iM值(而不是lvalues),im值(而不是x值),Im值(而不是prvalues),i值(而不是glvalues),以及m值(而不是右值).这不是标准使用的术语,不幸的是.

1这里“有身份”是指“其地址可以采取”; “可以从”意味着即将到期,由于其临时性质,或者因为程序员通过调用std :: move或类似的方式在类型系统中做出明确的规定.

2你可以在赋值的左边有右值:std :: vector< int>(17)= std :: vector< int>(42)是一个有效的表达式,即使没有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读