首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gcc对什么是左值感到困惑?

gcc对什么是左值感到困惑是因为左值的概念在C语言中具有一定的复杂性。左值是指可以出现在赋值运算符左边的表达式,它可以被赋值,可以取地址,可以作为函数参数等。在C语言中,左值可以是变量、数组元素、结构体成员等。

对于gcc编译器来说,它对左值的理解是基于C语言标准的规定。C语言标准规定了左值的定义和使用方式,gcc会根据这些规定来判断一个表达式是否为左值。然而,由于左值的概念比较抽象,有时候会导致一些特殊情况下的困惑。

在C语言中,有一些表达式看起来像是左值,但实际上不是。比如常量、函数调用的返回值、表达式的结果等,这些都不是左值。gcc在处理这些情况时可能会产生困惑,因为它期望得到一个左值,但实际上得到的是一个非左值。

为了解决这个问题,可以通过使用临时变量或者强制类型转换来将非左值转换为左值。临时变量可以将非左值赋值给一个左值变量,从而使得gcc不再感到困惑。强制类型转换可以将非左值转换为左值,使得gcc能够正确地处理表达式。

总之,gcc对左值的困惑是因为左值的概念比较复杂,需要根据C语言标准来进行判断。在一些特殊情况下,可能会导致gcc对左值的判断产生困惑,但可以通过使用临时变量或者强制类型转换来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么引用?跟什么关系?

引用 右引用是C++11中引入的新特性 , 它实现了转移语义和精确传递。 它的主要目的有两个方面: 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。...和右的概念: :能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。 右:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。...右引用和引用的区别: 可以寻址,而右不可以。 可以被赋值,右不可以被赋值,可以用来给赋值。...可变,右不可变(仅对基础类型适用,用户自定义类型右引用可以通过成员函数改变)。

1.6K20

GCC -O2 踩坑指南:严格别名(Strict Aliasing)与整数环绕(Integer Wrap-around)

1、什么别名(alias) 在 C 和 C++ 中,当多个 lvalue 指向同一个内存区域时,就会出现别名(alias)。..."%d\n", *ptr); // *ptr int 类型的表达式,与 int 类型兼容(相同) 2.1.2 与对象的有效类型兼容类型的限定版本 int x = 1;const int *ptr...= &x;printf("%d\n", *ptr); // *ptr const int 类型的表达式,与 int 类型兼容 2.1.2 与对象的有效类型相对应的有符号或无符号类型的类型 例如...int x = 1;unsigned int *ptr = (unsigned int*)&x;printf("%u\n", *ptr); // *ptr unsigned int 类型的表达式...("%c\n", *ptr); // *ptr char 类型的表达式, char 类型可以作为任何类型的别名。

28110

C++ 中 const 和 constexpr关键字解析:常量、函数和指针

很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用...很多的全局变量都是通过常量来进行修饰,需要注意的,使用const关键字修饰的变量需要立刻初始化 // 修饰局部变量,全局变量,成员变量 const int a = 2; // 错误,表达式必须可修改的...num) { // 错误,表达式必须可修改的,意思就是参数num个常量,无法修改 num = 3; } 修饰指针 虽然指针也是一种变量,不过当const与指针出现在一起的时候...= &a; // 第二种情况:常量指针 int a = 2; // const作用:使指针p无法指向其他变量 int* const p = &a; int b = 3; // 错误,表达式必须可修改的...{ public: void test() const { // 错误,表达式必须可修改的,因为member成员变量,而test函数被const修饰过后无法修改成员变量

67020

Effective Modern C++翻译(1):序言

“恩恩,我明白了,这还是C++,只是多了些东西而已”但是随着你这个修订后的语言的了解逐渐增长,你会对它的变化之大感到震惊,auto类型,基于范围的for循环,lambada表达式,右引用这些东西已经改变了...想要知道什么时候应该(什么时候不应该)把一个对象声明为auto?什么const成员函数应该是线程安全的感兴趣?如何使用std::unique_ptr实现pimpl?...C++11最流行的特性很可能移动语义,移动语义的基础从表达式中判断或右,这是因为右暗示了对象有资格使用移动运算,而通常不能。...这个方法的一个好的特性在于它帮助你记住了一个表达式的类型和这个表达式代表的一个还是一个右无关的,给一个类型T,你即可以即可以获得T的类型,也可以获得T的右类型,这是十分重要的,尤其当你处理一个右的引用参数的时候...,因为这个时候参数本身一个

1.2K90

面对数据缺失,如何选择合适的机器学习模型?

机器学习工具库开发的“哲学” 首先你有这个困惑是因为你直接调用了工具库,比如Python的sklearn和xgboost等,所以你认为算法A可以自动处理缺失而B不可以。...缺失数据会被分到子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。具体的介绍可以参考[2,3]。 ?...这样的处理方法固然巧妙,但也有风险:即我们假设了训练数据和预测数据的分布相同,比如缺失的分布也相同,不过直觉上应该影响不是很大:) 4. 什么样的模型缺失值更敏感?...线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计算预测和真实之间的差别,这容易导致缺失敏感。...但“调包”最大的风险就是不知道自己用的到底是什么,常常一知半解。 这并不可怕,可怕的当你感到迷惑的时候却没有追根溯源,搞清楚到底发生了什么。随着工具包的封装程度越来越高,调包的成本会越来越低。

2.2K60

JavaScript Scoping and Hoisting

foo) { var foo = 10; } alert(foo); } bar(); 如果你弹出的结果“10”感到惊讶,下面的这段代码弹出的结果会让你感到震惊。...那么这中间究竟发生了什么?虽然这看起来似乎让人感到陌生,危险,困惑,但是这就是JavaScript语言的强大并富有表现力的特征。...在JavaScript中的作用域如此的让人感到困惑,究其原因JavaScript看起来像是C家族的语言。...带有初始的变量在变量声明被执行时,会被赋予它的赋值表达式的。而不是变量被创建时。...我希望这篇文章已经揭示了,JavaScript程序员来说,最困惑的根源之一(scoping,hoisting)。我尽可能的透彻地阐述这件事,并避免在阐述这件事时 制造更多的困惑

49220

C++ 中的和右

下面GCC给出的变异错误提示: error: lvalue required as left operand of assignment 赋值的操作数需要一个,这里我们使用了一个右666...错误原因很清楚:setValue()返回了一个右(一个临时值6),他不能作为一个赋值的操作数。现在,我们看看如果函数返回一个,这样的赋值会发生什么变化。...让我们看下面的代码片段: int x = 1; int y = 3; int z = x + y; // ok 等一下,x和y,但是加法操作符需要右作为参数:发生了什么?...在C++中,当你做这样的事: int y = 10; int& yref = y; yref++; // y is now 11 这里将yref声明为类型int&:一个y的引用,它被称作引用...} 背后的道理相当直接的,字面常量10volatile的并且会很快失效(expire),所以给他一个引用是没什么意义的。如果我们让引用本身变成常量引用,那样的话该引用指向的就不能被改变了。

1.7K20

EOF是不是字符

什么 EOF? 百度百科上这样解释:EOF一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。...因此,这可能导致我们EOF的本质感到困惑。当然,这仅仅是一种猜测。下面看看另外的理由。 什么字符?字符可以看成文本的最小组成党委,比如A, b, B等都是字符。...在ANSI C中,EOF在标准库中,它的数字编码一般-1。...那么,那个“字符”的数字编码-1呢? 那就用前面演示的Python中的函数,来检索一下,看看-1应的字符是什么。...在以十六进制表示的输出内容中,此文件是以0a结尾的,那么这个0a是什么呢? # Python交互模式 >>> chr(0x0a) '\n' 事实再次说明,EOF不是字符。 它是什么

4.4K20

如何处理手势冲突 | 手势导航连载 (三)

不幸的, 进度条太靠近主屏手势区域 (Home Screen Gesture Area),所以当用户在该区域滑动时,系统把它错误地判断为用户要执行快速切换应用的操作,这也会让用户感到困惑。...(包括在后退和返回主屏按钮区域滑动) 不少游戏通常会在此处回答 "",因为: 游戏屏幕上的控件往往非常靠近屏幕/右边缘,或靠近屏幕底部。...如果您读过我们之前的文章,应该会记得 "强制系统手势交互区" 指系统手势始终被优先处理的屏幕区域。 Android 10 来说,强制交互区域只有一个,那就是屏幕底部。...这时就会让用户感到困惑,因为他们可能并不想后退。出现这种冲突时,我们就可以使用上面提到的手势区域排除 API 来解决。...注意在整个设备上,而不仅仅是在一个应用中保持一致性。这个限制看似严厉,但如果一个应用能够让屏幕的整个边缘都不响应系统手势,就会让用户感到困惑,这个应用也极有可能被用户卸载。

4.8K30

设计Dashboard的十条法则

Dashboard为什么重要? Dashboard信息的直观传达形式。其目的用易于理解的方式为用户呈现复杂信息。...如何设计Dashboard Dashboard设计最重要的步骤了解目标用户以及可以为他们提供什么价值。...正确的做法利用位置和大小区分他们的信息层级。 通过定义信息层级,向观众阐明最重要的信息 在左上方显示更多重要信息。信息从上至下,从至右,信息变得越来越不重要。...留白 留白设计所必需的。 当用户使用您的设计时,它为用户提供了喘息的空间。当用户来查看信息时,Da'sh'board设计中的空白会吸引用户。 减少空白将使用户感到混乱。...必要时要舍入数字,因为长数字会使用户感到困惑。 截断不必要的信息, 使用户更容易比较简单的细节。 10. 标签 使用可以将所需信息快速有效地传达给用户的标签。

1.4K10

用人的语言·为人设计

时,我所建立起来的联系关系: 这两个东西不一致→这些东西看起来很相似,但是当你点击其中一个时,它会A,点击另一个时,它会B。→这会让用户感到困惑,妨碍了用户从我们构建的东西中获得最大价值。...但是,如果你没有建立相同的联系,你可能会想:为什么一致性、极简主义或透气性很重要?这几个概念听上去很随意啊。没错,你可能的,没必要为了一致性而一致。...假设用户并没有因为两个看起来相似的东西而困惑,他们知道点了以后反应会不同,那么“一致性”就不再一个问题。 在讨论问题的时候,我的很多同事认为“一致性”作为论据他们来说并没有说服力。...但是,当我说“我们的目标不让人感到困惑”,这就没有争议了。 第二个意想不到的结果使用术语会导致我们忽视真正的最终目标。我们开始关注和响应公司的问题而不是用户的问题。...→ 人们应该能够看一眼就能知道什么最主要,应该做什么。他们不应该为选择感到困惑。 我们需要改进指标。这条曲线表现不好。

50520

带着问题去学习(1)-右引用与智能指针

https://github.com/watchpoints/daily-interview/issues/25 右引用解决了什么问题,他出现的目的是什么?...我不会直接解释什么引用。 相反, 我将从要解决的问题开始, 然后展示右引用如何提供解决方案。 这样,右引用的定义您来说就会显得合理和自然。...你会对“type&&”的含糊不清的性质感到舒服, type&& 本质是什么,回答到问题,右引用是什么?...第一次听 这个概念,感到 疑惑地方 疑惑 1 为什么说 The construct “type&&” doesn’t always represent an rvalue reference....引用折叠”而其实引用折叠后依旧普通的引用或者右引用, 所以其实“引用的引用”严格来说是不存在的。

63810

前端技术观察第 20 期

业界(新)技术的深度地、优秀地实践 Tutorial Tools And Codes 《前端技术观察》的目的让大家: 更及时的了解到业界最新的技术 受益于高质量的教程、文章 了解业界更优秀的代码、...,功能强大且,最重要的无缝,这其中“离线模式”关键的一环。...不同平台和设备的推送总有一些不同,本文带你了解主流平台推送的设计差异 https://mobiledevweekly.com/link/90078/web 当前端意味着全栈 前端开发处于艺术与逻辑,业务与表达,脑与右脑...https://javascriptweekly.com/link/90575/web 使用可视化工具学习Z-Index —曾经为为什么将z-index设置为99999不能解决您的定位问题而感到困惑?...https://frontendfoc.us/link/90241/web 为什么我们从Yarn迁移到pnpm yarn和pnpm都是npm的流行替代品,但是为什么您要从一个换到另一个呢?

51420

Think in 递归

无论如何,希望看完这篇文章的人不再递归感到混乱,也许能自己运用递归解决算法问题或者实际问题,最重要的希望能帮助一些曾经和我有一样困惑的人。      ...我来想想到n-1阶的时候怎样的呢?你会发现很快你就会到我上面的那个懵圈状态,反过来你会怀疑你的算法是不是的,这样你就会挂了。...看着这个问题思考,思路很容易就流淌出来,一个二叉树所有叶子节点权重的和就等于一个子树的叶子节点的权重加上右子树的叶子节点的权重。...“递”的部分很容易就想出来了,那么“归”的部分就可以从最小的问题思考一下,因为“归”应该满足最小的问题集合,假设这个树只有一个根节点,那么可能返回0,如果一个根节点带一个叶子节点,那么应该返回这个叶子节点的...,因为叶子节点的的和,所以所有的右子树在这里有可以化为另一个“递”。

764120

如何理解分布式系统下的CAP理论?

前言曾经有一段时间CAP理论感到非常困惑,不理解“一个分布式系统无法同时满足一致性、可用性和分区容错性”的说法。尤其在网上看到一些误导性的说法,就更是不理解了。...如果有同样困惑的,希望通过本文的表述能够为你提供解答。...为什么CAP理论感到困惑理论表述的不完整性在网上经常可以看到一些CAP理论的文章,大多数都是简单地列出了CAP三个要素的定义,然后开启“一致性、可用性和分区容错性为什么不能同时成立”的解释。...为什么总有集群的影子?”"为什么不能保证CA?"...Zookeeper 集群 Leader 在过半节点同意成功写入后,客户端才会读取到这个,所以说 Zookeeper CP 架构。

10710

「译」按钮文本设计的五大原则

使用错误的按钮文本会导致用户感到困惑,并进而拖慢工作效率、徒增工作量。如果你想让用户轻松操作 app,那么设置正确的按钮文本是必不可少的。...当用户看到行为动词的时候,他们自然就知道按钮用来做什么的了。因此,他们可以在不阅读任何提示性文本(例如对话框)的情况下采取操作。...原则 3:使用功能化的表达方式 模糊且通用的按钮文本会让用户感到困惑。由于文本是通用的,这使得用户不清楚按钮的具体作用。要想让用户明晰操作的结果是什么,必须改用功能化的表达方式。...正式的语气会让人觉得少了一丝人情味,用户的直观感受有个人在用很不自然地语气和自己说话,此时,我们的按钮就不那么“受待见”了。标题式大写破坏了自然的阅读流程,并且分散了用户潜在信息的注意力。...词形若是都没有差异,阅读障碍的用户来说是很不友好的。 全字母小写传达的则是一种随意且懒散的语气,用户会觉得似乎没人重视这部分的设计,这种不专业的感觉会消磨他们按钮的信任感。

67020

邪恶的编码魔咒,你中招没?

自从我观看了Gary Bernhardt所推崇的视频以后,就某些编程语言的怪异表现着迷了。一些编程语言比其他语言有更多令人感到意外的表现。...在Python 2中True进行了错误的重赋值 英文中的Two和True的发音押韵的,但这并没什么意义。...Java和Python语言中不可思议的表现 对于Java程序员来说,“==”运算符的语义常常令人感到困惑。但是,即使一些微不足道的场景,操作符的不一致性表现也会使情况变得比较复杂。...我的猜测,内存中一个列表里重复的指向相同对象的。 C语言中的反向下标 反向的下标符让任何一位开发者都会感到头疼。...令人感到惊奇的,事实上很多编程语言的数组索引都是从1开始的。 Ruby语言中0的true ……也只有Ruby语言。

89470

要看你喂它吃什么 | 怎样玩坏GAN

进行无监督学习的GAN,神经网络界的小学霸。它的两个网络各司其职,一个Generator (G) ,画师,另一个Discriminator (D) ,鉴赏家。...G会生成一些画,来让D感到困惑,分不清哪些G画的,哪些人类真正的画作。通过时间的推移,G的画会和人类的作品越来越接近,而D的分辨能力也会越来越强。 ?...△ 入口即化系列 关于技术部分,他说有时候GAN会陷入如一种叫做“局部极小 (local minima) “的窘境。...△ 切颗脑 () 与半兽人 (右) 那么问题来了,因为程序猿男生,所以养大的AI才比较关注躯体的部分么?再看看它画里的脸,一直在毁容,从未被修复。...△ 不过依然手术失败的画风

23010

Linux Kernel CMPXCHG函数分析

最近看到Linux Kernel cmpxchg的代码,实现很不理解。上网查了内嵌汇编以及Intel开发文档,才慢慢理解了,记录下来以享和我一样困惑的开发者。...其实cmpxchg实现的原子操作原理早已被熟知: cmpxchg(void* ptr, int old, int new),如果ptr和old的一样,则把new写到ptr内存,否则返回ptr的,整个操作原子的...r" (_new)要把_new的读到一个通用寄存器中使用。...在cmpxchg中,注意"0"(_old),这个困惑我的地方,它像告诉你(_old)和第0号操作数使用相同的寄存器或者内存,即(_old)的存储在和0号操作数一样的地方。...很明显,符合我们cmpxchg的理解。 另:Intel开发手册上说lock就是让CPU排他地使用内存。

4.1K100
领券