-
C++constexpr与常量表达式
2021-01-16 16:28:581)常量表达式:在“编译过程”就能确定结果的表达式。 包括: 字面值 常量表达式初始化的const对象 以下不是常量表达式 int s = 123; const int sz = get_size(); 2)constexpr变量(C++11): 变量声明为contexpr类型...常量表达式:在“编译过程”就能确定结果的表达式
字面值
常量表达式初始化的const对象
以下不是常量表达式
int s = 123;
const int sz = get_size();constexpr变量(C++11)
变量声明为contexpr类型,编译器会检查变量的值是否是个常量表达式
constexpr int mf = 20 //20是常量表达式
constexpr int limit = mf + 1; //mf + 1是常量表达式
const int sz = size(); //只有当size是一个constexpr函数时,声明才正确constexpr函数
这种函数足够简单以使编译时就可以计算其结果。
字面值类型
能使用constexpr声明的类型应该足够简单,称为字面值类型
包括
算数类型
引用 & 指针
constexpr的指针初始值必须是nullptr,0或存储于某个固定地址中的对象
一般来说全局变量和静态局部变量的地址不变
constexpr指针,constexpr只对指针有效,与指针所指对象无关
constexpr const int *p = &i //p是常量指针,指向整形常量i不包括
自定义类型
I/O 库
string字符串 -
在此上下文中不允许使用名称 ""。有效表达式包括常量、常量表达式和变量
2010-07-19 10:26:00在此上下文中不允许使用名称 ""。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。这个问题其实很简单,就是在插入数据时加个引号在此上下文中不允许使用名称 ""。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
这个问题其实很简单,就是在插入数据时加个引号 -
C++中的常量表达式和constexpr
2017-04-05 16:14:01自然包括字面值,用常量表达式初始化的const 对象。如: const int a=24;//a是常量表达式 const int b=a+1;//b也是常量表达式 int c=8;//c不是,普通int而不是const int const int len=get_size();//len不是,因为...一 常量表达式:
值不会改变,编译中就能得到计算结果的表达式。
自然包括字面值,用常量表达式初始化的const 对象。如:
const int a=24;//a是常量表达式
const int b=a+1;//b也是常量表达式
int c=8;//c不是,普通int而不是const int
const int len=get_size();//len不是,因为要具体值运行时方才获知
二 constexpr变量
在C++11标准中规定,允许将变量声明为constexpr类型,以便由编译器验证变量值是否是常量表达式。
声明为constexpr变量一定是一个常量,且必须由常量表达式初始化!
constexpr int a=24;//24作为常量表达式初始化
constexpr int b=a+1;//a+1也是常量表达式
constexpr int len=get_size();//只有当get_size()是constexpr函数时才正确!
特别区分:
const int *p=nullptr;//p是个指向整型常量的指针!
constexpr int *q=nullptr;//q是一个指向整数的常量指针!
注:函数体内定义的变量一般而言不存放在固定的地址中(局部变量),constexpr指针不能指向
这样的变量。当然,函数体外的变量(静态)地址固定,可用来初始化constexpr指针。另外,在函数体内
定义的但是有效范围超出体内的变量(static)也可用来被constexpr指向。如若在函数外有:
int a=0;
constexpr int b=24;
则在函数体内作:
constexpr const int *p=&a;//p是常量指针,指向整型常量a
constexpr int *p1=&b;//p1是常量指针,指向整型b
三 constexpr函数
该类函数能用于常量表达式,返回值和所有形参均是字面值类型,函数体内必须有且只有一条return语句。
注:此处的字面值类型并不是单指字面值之意,字面值类型包括了算数类型,引用,指针,枚举和某些有限制的类。
constexpr int func(){return 24;}
constexpr int num=func();//正确!!
允许constexpr函数返回值不是常量。如
constexpr int getNum(int i){return i*2;}
如果getNum(arg)中arg不是常量表达式,则getNum(arg)不是常量表达式如:
int a=20;
getNum(a);
如果getNum(arg)中arg是常量表达式,则getNum(arg)也是常量表达式如:
constexpr int a=20;
getNum(a);
四 内联函数与constexpr函数关系
将一些短小精悍的功能弄成一个函数,优点是可读性强,确保行为统一,修改容易,重复利用等;
缺点是一次函数调用意味着一系列工作,保存寄存器,返回时回复现场,甚至各种拷贝实参等。
若将函数返回类型前加 inline,
指定为内联,意味着它能在调用之处“内联地”展开即可,没有函数运行开销。
在执行初始化任务时,编译器对constexpr函数调用替换成结果值,为了能在编译中随时展开,
constexpr函数已经被隐式地指定为内联函数!
有内联函数定义可知,内联函数与其他函数不同,可多次定义,原因是:
编译器想展开函数仅仅靠函数声明是不够的,需要知道函数定义行为。
当然,对于给定的内联函数,多个定义必须完全一致,故可将其定义放置在头文件中。
-
错误提示: 在此上下文中不允许...有效表达式包括常量、 常量表达式和变量(在某些上下文中)。不允许使用列名。
2012-01-12 14:37:26有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 代码中有如下语句: string sql = "insert into [Inform] values ("+title+","+content+",'true','2012/1/12')"; 其中title,content...今天在做添加操作时,发生如下错误:
在此上下文中不允许使用名称 "XXX"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
代码中有如下语句:
string sql = "insert into [Inform] values ("+title+","+content+",'true','2012/1/12')"; 其中title,content为变量
经过google后找到原因:
sql字符串的书写如下: insert into [Inform] values('title','content','true','2012/1/12')
sql字符串,要向数据库中插入 字符串、日期,其两边是需要加上单引号的
修改代码如下: string sql = "insert into [Inform] values ('"+title+"','"+content+"','true','2012/1/12')";
呵呵,问题解决。
还有个小问题--表单提交后,跳转页面
//页面跳转 Response.Write("<script>window.parent.location.href='Default.aspx'</script>"); Response.End();
其中 Default.aspx 为要跳转到的页面。
-
插入数据库错误提示:有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
2014-12-14 15:44:28今天编写学生注册模块,在一个插入语句的写法上遇到了困难,在提交注册表后,数据库无法接受汉字信息,而且提示题中错误。 百度后,找到解决方法: 修改之前的sql语句: String sql="insert into Student(ID,... -
[SqlException (0x80131904): ...有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。]
2010-03-08 14:40:00在看牛腩老师的ASP视频时,自己手下也没闲着,跟着老师敲了一些代码,其中文本框中输入数字时,结果显示正确。程序跑的通。...有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。] -
[SqlException (0x80131904)...有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。]...
2010-03-08 14:40:00在看牛腩老师的ASP视频时,自己手下也没闲着,跟着老师敲了一些代码,其中文本框中输入数字时, 结果显示正确。程序跑的通。 而当输入为字符串时,则错误...常量表达式和变量(在某些上下文中)。不允许使用列名。] ... -
错误提示:在此上下文中不...有效表达式包括常量、 常量表达式和变量(在某些上下文中),不允许使用列名。...
2014-12-23 23:05:00出现这种情况的原因,是因为在SQL语句的编写格式不正确。 事例展示: 错误: ...1 string sql = "insert into person ([name], sex, salary) values ('text_name ', 'text_sex ', text_salary )";... -
C++利用常量表达式在编译期操作字符串
2017-09-29 09:23:00但是__FILE__实际上是包括文件名的完整路径,比如这样:/tmp/blablabla-XXXX-YYYY-ZZZZZZ/example.cpp这样的输出太过冗长,我们需要的实际上只是example.cpp这个时候要是老老实实地调函数把example.cpp切出来当然不... -
Java编译器对于String常量表达式的优化
2011-10-07 19:49:17http://developer.51cto.com/art/200709/56159.htm 看来Java(包括编译器和jvm)对string的优化,真的是到了极点了,string这个所谓的“对象”,完全不可以看成一般的对象,Java对string的处理近乎于基本 -
静态存储的变量初始化必须是常量表达式
2010-03-09 09:54:00摘自: c primer plus(第四版) 14.3.1 & 12.1.7初始化一个具有静态存储时期(比如静态外部链接、静态内部链接、静态空链接)的变量只能使用常量值,不能用变量。静态存储的变量包括:1.全局变量2.文件全局变量3.局部... -
java中常量、表达式
2020-03-01 18:48:32复合数据类型包括:class类、interface接口、数组。null 索引在运行时并没有对应的类型,但它可以被转换为任何类型(不能是简单类型)。索引类型的默认值就是null 强调:赋值时接收数据的变量和给的值必须类型一致,... -
Java中的常量、表达式中的算术运算符、i++、++i、i--、--i
2020-11-02 19:05:59今日的学习内容有:常量、表达式 常量 常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量123【字面量】,实型常量1.23,字符常量’A’,布尔常量true等 表达式 表达式就是运算符、操作数... -
Java表达式的常量折叠
2009-09-02 11:04:57[url=http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.28]Java语言规范15.28[/url]规定了Java的常量表达式可以表示原始类型或者字符串;它们不但可以由纯粹的字面量构成,还可以包含能... -
表达式括号匹配 一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的...
2011-02-15 22:38:17一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出OK, 不匹配,输出NO。(表达式的长度小于50) -
表达式
2020-11-02 13:47:25在数据库的表达式一般指由常量、变量、函数...SQL语言中包括三种表达式,第一种是<表明>后跟<字段表达式>,第二种是SELECT语句后跟的<目标表达式>,第三种是WHERE语句后的<条件表达式>。 ... -
Python基础语法——常量、变量、内置函数、运算符与表达式
2020-08-09 18:01:35常量、变量、运算符和表达式、内置函数常量变量运算符与表达式常用内置函数 常量 常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变;Python并没有命名常量,也就是说不能像C语言那样给常量起一个... -
PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程
2015-05-14 14:31:101、变量 PHP中使用$后跟变量名表示一个变量,变量名区分大... 变量的数据类型 整数类型 ... 整数类型:可以在php中指定的整数包括十进制、八进制、和十六进制,整形数值前可以加上符号“+”或“-” */ $i=2468;/ -
宏观表达式
2014-10-29 11:48:22在这种情况下,如果在到达这段代码,该table_size宏尚未被定义,它可以被定义为一个值100。如果它已经存在,它将保持其先前的值自#指令不被执行的...条件如下#如果或# elif只能计算常量表达式,包括宏观表达式。例如: -
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能...
2019-01-23 18:41:00Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能。 下面是个例子: import org.junit.Test; import java.util.ArrayList; import java.util.List; ... -
C语言数组笔记2018级数学四班沈园园
2018-12-24 19:56:31注意:常量表达式包括常量与符号常量,不能包含变量。 2.二维数组的定义: 类型说明符 数组名[常量表达式][常量表达式]; 二、C语言中数组的引用 1.一维数组的引用: 数组名[下标]; 2.一维数组的初始化: a.在定义... -
lua表达式
2020-02-14 09:33:08Lua 中的表达式包括数字常量、字符串常量、变量、一元和二元运算符、函数调用。还可以是非传统的函数定义和表构造。 算术运算符 二元运算符:+ - * / ^ (加减乘除幂) 一元运算符:- (负值) 这些运算符的操作数都是... -
C++ Primer学习系列(2):数组和指针/表达式/语句
2019-09-16 12:16:52第 4 章 数组和指针 4.1 数组的类型:可以是内置类型或类类型;... 数组的维数:只能是编译期即能确定值的常量表达式,包括整型常量、枚举常量或者用常量表达式初始化的整型 const对象。 字... -
JavaScript表达式
2017-08-22 11:03:45最简单的表达式就是原始表达式,包括常量或直接量,关键字和变量 直接量是直接在程序中出现的常数值 1 数组和对象的初始化表达式 数组的初始化就是创建一个新的数组的过程,初始化表达式被称为数组直接量 数组的初始... -
Scheme R5RS 4.表达式
2016-08-24 19:20:24表达式类型分为基本类型和派生类型两种. 1. 基本表达式类型包括变量和过程调用....常量表达式(quote 〈datum〉) 可简写为 ‘〈datum〉 数值常量,字符常量,字符串常量和布尔常量的值是”它们自身”. 〈datu -
sql between包括两端吗_数据库基础之SQL表达式
2020-12-09 06:41:58】1 基本概念一般指由常量、变量、函数和运算符组成的式子为表达式,应特别注意的是单个常量、变量或函数亦可称作表达式。SQL 语言中包括三种表达式, 第一种是 < 表名 > 后跟的 < 字段名表达式 > ,第... -
C语言怎样区分表达式和表达式语
2020-03-08 19:57:15具体包括:数字,标识符,字符常量,字符串常量,函数调用,以及以上几种用运算符组合起来。 如a,a++,a+b,"dfsaf",f().... 表达式后面加一个分号就构成了表达式语句。 为什么要用表达式语句呢?因为我们需要...