lvalue相关内容

在C语言中,是否有可能在语义上创建一个类型不完整的左值?

在C89标准中,我找到以下部分: 3.2.2.1 L值和功能指示符 除非它是sizeof运算符、一元&;运算符、++运算符、--运算符或的左操作数的操作数。运算符或赋值运算符,则不具有数组类型的左值将转换为存储在指定对象中的值(不再是左值)。如果左值具有限定类型,则该值具有左值类型的非限定版本;否则,该值具有左值类型。如果左值的类型不完整并且没有数组类型,则行为未定义。 如果我 ..

错误左值需要作为赋值c ++的左操作数

整个程序基本上只允许用户移动光标,如果用户在给定的坐标范围 (2,2) 内,则允许用户键入输入.我刚刚提供了一些我认为足以解决问题的代码. 我不知道是什么导致了这个问题.你能解释一下为什么会这样吗? void goToXY(int ,int); 用两个整数创建了一个函数. int X = 0, Y = 0; 初始化两个整数. if(X = 2 && Y = 2){cin>>输入;} ..
发布时间:2022-01-21 00:12:57 C/C++开发

将临时绑定到左值引用

我有以下代码 字符串三(){返回“三";}void mutate(string& ref){}主函数(){变异(三());返回0;} 你可以看到我正在将 three() 传递给 mutate 方法.这段代码编译得很好.我的理解是,不能将临时对象分配给非常量引用.如果是,这个程序是如何编译的? 有什么想法吗? 编辑: 尝试过的编译器:VS 2008 和 VS2010 Beta ..
发布时间:2022-01-17 08:26:51 C/C++开发

如何分配给R中变量值的names()属性

在 R 中,“assign('x',v)"将名称为 'x' 的对象设置为 v.将 'x' 替换为将文本函数应用于变量 x 的结果.然后“分配"显示它的价值. 很遗憾,“assign(paste('names(','x',')',sep=''),v)"失败了.所以如果 'x' 是一个变量 x,我可以设置它的值,但我不能给它的元素命名. 可以解决这个问题吗?也许是解析评估技巧?谢谢. ..
发布时间:2022-01-13 18:11:15 其他开发

表达式必须是可修改的 L 值

我这里有char text[60]; 然后我在 if 中做: if(number == 2)文字=“真棒";别的text = "你失败了"; 它总是说表达式必须是一个可修改的L值. 解决方案 lvalue 表示“左值";- 它应该是可分配的.你不能改变 text 的值,因为它是一个数组,而不是一个指针. 要么将其声明为 char 指针(在这种情况下,最好将其声明为 cons ..
发布时间:2022-01-12 20:16:41 其他开发

为什么这个结果不是左值?

我需要一些关于这种奇怪行为的建议——让我们看看这段代码: int ** p; 编译没有任何问题: p++; 但是这个: ((int**)p)++; 给我这个错误信息:“error: lvalue required as increment operation". 我正在将 p 转换为它已经是的类型,没有任何变化,那么问题是什么?这是我遇到的问题的简化版本,当我试图编译一个旧的gd ..
发布时间:2021-12-31 22:09:48 其他开发

'?:' 的返回类型(三元条件运算符)

为什么第一个返回一个引用? int x = 1;int y = 2;(x > y ? x : y) = 100; 虽然第二个没有? int x = 1;长 y = 2;(x > y ? x : y) = 100; 实际上,第二个根本没有编译 - “不是左值赋值". 解决方案 表达式没有返回类型,它们有一个类型和 - 正如最新的 C++ 标准中所知 - 一个值类别. 条件表达式 ..
发布时间:2021-12-25 12:59:50 C/C++开发

一个 VS2010 错误?允许在没有警告的情况下绑定非常量引用到右值?

string foo() { return "hello";}int main(){//下面将非常量(左值)引用绑定到右值应该是非法的字符串&tem = foo();//下面应该是正确的,因为只有const引用可以绑定到右值(最重要的const)const string&constTem = foo();} GCC 是给出编译错误的好方法:从 类型的临时对象对 std::string& 类型的非 ..
发布时间:2021-12-14 18:43:44 C/C++开发

转换指针不会产生左值.为什么?

在此处发布我最有争议的答案之一后,我敢问几个问题,最终填补了我的一些知识空白. 为什么 ((type_t *) x) 类型的表达式不被认为是有效的左值,假设 x 本身是一个指针和一个左值,而不是只是一些表达? 我知道很多人会说“标准不允许",但从逻辑的角度来看,这似乎是合理的.标准不允许的原因是什么?毕竟,任何两个指针的大小都相同,指针类型只是一个编译时抽象,表示在进行指针运算时应该应 ..
发布时间:2021-12-13 13:27:19 其他开发

为什么 a+++++b 不起作用?

int main(){int a = 5,b = 2;printf("%d",a+++++b);返回0;} 此代码给出以下错误: 错误:需要左值作为增量操作数 但是如果我在 a++ + 和 ++b 中放置空格,那么它工作正常. int main(){int a = 5,b = 2;printf("%d",a++ + ++b);返回0;} 第一个例子中的错误是什么意思? 解决 ..
发布时间:2021-12-02 00:09:26 其他开发

“错误:左值需要作为赋值的左操作数";在条件运算符中

我是 C 新手,今天我学会了“?"运算符,它是 if-else 语句的短类型.但是,当我执行此代码时: int b;整数 x;b=3 我收到一个错误“错误:左值需要作为赋值的左操作数".我不明白为什么会这样.我心目中的过程是程序先给x赋值34,然后再给b赋值x的值,即34.另一方面,我可以将语句用作 int b;整数 x;b=3 没有任何错误.我看了看我的书,但没有任何帮助.为什么我不能使 ..
发布时间:2021-11-30 12:36:29 其他开发

什么是赋值运算符的返回类型?

我刚刚开始使用 C++.我对赋值和取消引用运算符的返回类型有点困惑.我正在关注 C++ Primer 这本书.在各种场合,作者说赋值运算符的返回类型是对左手操作数类型的引用,但后来又说返回类型是左手操作数的类型.我已经提到了 C++11 Standard Sec.5.17,其中返回类型被描述为“左值引用左手操作数". 同样,我无法弄清楚取消引用是返回指向的对象还是对对象的引用. 这些陈 ..
发布时间:2021-11-30 12:28:13 C/C++开发

为什么左值转换有效?

我今天第一次看到这种演员阵容,我很好奇为什么会这样.我认为以这种方式铸造会分配给临时成员,而不是班级成员.使用 VC2010. A 类{民众:一种() :m_value(1.f){((float)m_value) = 10.f;}const float m_value;}; 解决方案 它不应该工作.使用强制转换表示法到 float 的显式类型转换将是纯右值(第 5.4 节): 表达式 ..
发布时间:2021-11-30 12:12:41 C/C++开发

数组名称不是左值是否有原因?

例如 int x[10];int i = 0;x = &i;//出现错误! 根据C - 参考手册,数组名不能是左值.因此,x 不能是左值.但是,数组名称不能是左值的原因是什么?比如第三行为什么会出现错误? 解决方案 您的参考不正确.数组可以是左值(但不能是可修改的左值),而“数组名称"(标识符)总是是左值. 举个例子: int x[10];int i = 0;x = &i;// ..
发布时间:2021-11-18 04:06:46 其他开发

为什么数组类型对象不可修改?

此处声明 术语可修改左值用于强调左值允许更改和检查指定的对象.以下对象类型是左值,但不可修改的左值: 数组类型 不完整的类型 const 限定类型 一个结构或联合类型,其成员之一被限定为 const 类型 因为这些左值是不可修改的,所以它们不能出现在赋值语句的左侧. 为什么数组类型的对象不可修改?写的对不对 int i = 5, a[10] = {0};[i] = ..
发布时间:2021-11-18 01:35:46 其他开发