Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >文字数字被视为常量吗?

对于像PI这样的contants来说,更好的方式是#定义它们或将它们声明为const,这样编译器就可以优化,变得不太容易出错。然而,我想知道,语句中的文字数字是如何处理的?例如:

代码语言:javascript
运行
AI代码解释
复制
float x;
const int y = 60;
x = y / 3.0f;

在这个例子中,3.0f是如何处理的?它会继承常量的优化吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-07 23:43:55

将发生什么优化取决于编译器。在您的例子中,C和C++编译器通常都有足够的信息将您的源代码优化为相同的机器代码。换句话说,它实际上并不太依赖于这段代码中的文字和常量。

话虽如此,在C和C++中,文字和常量这两个术语的含义有很大的不同(并且您同时标记了问题C和C++ )。

C中的

  • 60是常量,但y不是常量。如果愿意,可以将y称为常量限定变量,但在C术语中它不是常量,因为单个y在C中不是常量表达式。

至于字面量,在C语言中,字面量这个术语只适用于字符串字面量(在C99中也适用于复合字面量),也就是说,你的代码中根本没有字面量。

C++中的

  • 603.0.f都是文字,它们形成常量表达式(分别是整型和浮点型-point )。y也是int类型的常量,从某种意义上说,单个y是C++中的常量表达式。

您可能注意到差异的情况与优化无关,而是与语言的定义方式有关。例如,在C++中,在文件范围数组类型声明中使用上述y是合法的,但在C++中则不合法

代码语言:javascript
运行
AI代码解释
复制
 typedef int int_array[y]; /* OK in C++, ERROR in C */
票数 10
EN

Stack Overflow用户

发布于 2010-08-07 23:41:20

由于您使用#define请求预处理器进行文本替换,因此您的代码与以下代码相同:

代码语言:javascript
运行
AI代码解释
复制
#define VAL 3.0f

float x;
const int y = 60;
x = y / VAL;

如何优化直接常量值显然取决于编译器。但是,如果您仔细观察汇编代码(例如,由gcc编写的汇编代码),就会注意到编译器直接写入浮点标准中编码3.0的二进制序列。

票数 1
EN

Stack Overflow用户

发布于 2010-08-08 00:24:55

在某些架构上,可以直接使用的字符串大小是有限制的。当字符串文字的大小太大时,编译器需要将常量存储在只读数据内存中的某个位置,然后在需要时从内存中加载值。

如果将值存储在常量变量中,则编译器很有可能只存储常量的一个值并适当地使用。然而,如果一个#定义了常量,这只会使预处理器将文字值放入代码中,因此编译器有可能没有意识到您正在使用相同的值并多次存储常量。正因为如此,常量变量比#定义变量更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3432478

复制
相关文章
[Leetcode 2021 刷题计划] 224. 基本计算器
由于只含有加减法和括号, 并不需要考虑运算优先级的问题,仅有由于括号外符号对括号内符号的影响。所以只需要考虑括号外符号对括号内符号的反转。
windism
2021/03/10
2910
224. 基本计算器
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
张伦聪zhangluncong
2022/10/26
3840
227. 基本计算器 II
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
张伦聪zhangluncong
2022/10/26
3130
[Leetcode 2021 刷题计划] 227. 基本计算器 II
每日一题时间: 2020-03-11 题目链接: 227. 基本计算器 II 官方题解链接: 基本计算器 II 题目 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5 提示: 1 <= s.length <= 3 * 105 s 由整数和算符 ('+', '-', '*', '/') 组成,中间
windism
2021/03/11
3220
c++实现简单计算器
帮一个同学写的,非计算机类专业,应付交差,也没什么功能,两个数的加减乘除运算,以及三角函数的运算。要求用到模板、运算符重载和异常处理。 一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。 代码如下: 1 #include<iostream> 2 #include<string> 3 #include<cmath> 4 #include<cstdlib> 5 6 using namespace std; 7 8 //四则运算 9 template
欠扁的小篮子
2018/04/10
2K0
Basic Calculator 基本计算器-Leetcode
1.题目: Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces . You may assume that the given expression is
老白
2018/03/19
1.2K0
227. 基本计算器 II
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5 class Solution { public int calculate(String s) { /** 有一个记录上一次出现的符号变量的 pre 加法直接入栈
编程张无忌
2021/06/01
3280
LeetCode 224. 基本计算器(栈)
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
Michael阿明
2020/07/13
5590
c++多态案例之计算器类
案例描述:利用普通技术和多态技术分别实现两个操作数进行运算的计算器类。 多态的优点:代码结构清晰;可读性强;利于前期和后期的扩展以及维护; #include<iostream> using namespace std; //普通写法,如果想扩展,需要修改源码 //在实际开发中,提倡开闭原则,对扩展进行开发,对修改进行关闭 class Calculator { public: int num1; int num2; int getResult(string oper) {
西西嘛呦
2020/08/26
6340
LeetCode 227. 基本计算器 II(栈)
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
Michael阿明
2020/07/13
6250
LeetCode 227. 基本计算器 II(栈)
C++基本语法
&在c++中的一种作用为取出当前变量在内存的逻辑地址 *在c++中的一种作用为取出当前逻辑地址对应的内存空间的值 c++中提供指针变量存储对象的地址,指针的运算会被编译器优化为地址的运算,比如一个int类型的指针 p+1的值实际是p指向的地址+1个int所占空间大小后的逻辑地址 指针语法为 typename * variable,比如
歪歪梯
2020/08/17
1.1K0
用C++模拟"奇怪"的手机计算器
风水轮流转,出道多年一向默默无闻的手机计算器突然成了网红,类似手机计算器“全线阵亡”这样的言论充斥各种媒体。问题的起源是网友发现手机计算器上计算10%+10%这样的小学数学范畴的运算时,手机计算器得出的结果并不是标准数学答案0.2,而是让人觉得有点奇怪的0.11!这是不是手机计算器软件设计者出现的bug呢?
诸葛青云
2019/10/07
9030
用C++模拟"奇怪"的手机计算器
力扣227——227. 基本计算器 II
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。整数除法仅保留整数部分。
健程之道
2020/03/12
3410
☆打卡算法☆LeetCode 224. 基本计算器 算法解析
大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
恬静的小魔龙
2022/09/27
4560
☆打卡算法☆LeetCode 224. 基本计算器 算法解析
简单计算器 C++ 你是真的会玩坑
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
叶茂林
2023/07/30
2360
小朋友学C++(24):实现简易计算器
一、需求 编写一个简易计算器,能实现最基本的加减乘除四则运算。 二、代码实现 #include <iostream> using namespace std; int main() { double num1,num2; char op; // 运算符号 char flag; // 是否继续运算,'Y'或'y'表示是,'N'或'n'表示否 while(true) { cout << "Enter first number:" << end
海天一树
2018/12/24
7980
【C++简明教程】C++基本语法
在 C++ 中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。
机器视觉CV
2020/07/23
9680
【C++简明教程】C++基本语法
C语言和C++混合开发简单版本计算器
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/10/28
1.2K0
C语言和C++混合开发简单版本计算器
基于STM32设计的计算器(实现基本运算)
计算器是最常见的工具了,现在不管是手机、电脑都带有计算器功能,支持强大的科学运算等。
DS小龙哥
2022/01/06
2K0
基于STM32设计的计算器(实现基本运算)
C++ OpenCV基本阈值操作
新建一个项目opencv-0014,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.这次我们直接在第二个图片上加上一个TrackBar直接显示出来,然后再进行操作,其中定义了一个thresthold_value的值为TrackBar的初始值,然后写了定义一了个TrackbarEvent(int,void*)的事件用于关联Trackbar的,这次我们加载的图片是几何形状的图片
Vaccae
2019/07/24
2K0

相似问题

C++新手-基本计算器问题

40

C++基本计算器。初学者

34

基本计算器

23

基本贷款计算器

12

基本JFrame计算器

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档