问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于typedef的问题。typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs)是什么意思?

发布网友 发布时间:2022-04-26 12:57

我来回答

5个回答

懂视网 时间:2022-04-26 17:18

JavaScript 引擎在查找一个变量的时候,有两种查找机制:LHS 和 RHS。

RHS 的查询是简单地查找到某个变量的值,而 LHS 则是试图找到变量的容器的本身。

一个简单的例子:当我们执行 console.log(a) 时,执行的就是 RHS ,因为这里 a 并没有赋予任何的值。相应的,需要查找并取得 a 的值,这样才能将值传递给 conso.log(..)。

而当我们执行到 a = 2 时,这里对 a 的引用就是 LHS 引用,因为实际上我们并不关心当前的值是什么,只是想要为 =2 这个赋值操作找到一个目标。

需要注意的是:

当我们执行以下代码:

function foo(a){
  console.log(a); // 2
}
foo(2);

这里对 foo 的调用执行了 RHS 引用,但还有一个隐式的 a = 2 的操作,这里又执行了一个 LHS 引用。

我们通常把 function foo(a){} 转变为 var foo,foo = function(){} ,如果这样理解的话,这个函数声明会执行 LHS 查询,但是在引擎执行代码的时候,并不会有线程专门用来将一个函数值“分配给”foo。所以,将函数声明理解成 赋值 的 LHS 查询的形式并不合适。

区分 LHS 和 RHS 是一件很重要的事。如果 RHS 查询在作用域链中找不到需要的变量,会抛出 ReferenceError 的异常。

function foo(a){
  console.log(a + b);
}
foo()

以上代码会抛出异常:b is not defined

相比之下,如果JavaScript引擎执行的是 LHS 查询,如果一直到顶层的作用域(全局作用域)中都没有找到目标变量的话,它就会在全局作用域中声明一个具有目标名称的变量,并将其返回给引擎。(非严格模式下,严格模式下会禁止自动创建或隐式创建全局变量)

function foo(a){
  b = a; // b = 2
}
foo(2)

上面的代码执行的 LHS 查询,在非严格模式下,JavaScript 引擎在全局作用域中没有找到 b,所以它就在全局作用域中声明了一个变量 b。所以此时结果不会报错且b被赋值为2。

总结:

作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。

= 操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。

LHS 和 RHS 查询都会在当前执行作用域中开始,如果有需要(当前没找到),就会向上级作用域继续查找目标标识符(作用域链)。

不成功的 RHS 会导致抛出 ReferenceError 异常。不成功的 LHS 会自动隐式在全局作用域中创建一个全局变量(非严格模式下),该变量使用 LHS 引用的目标作为标识符。(如果是严格模式下也会抛出 ReferenceError 异常)。

热心网友 时间:2022-04-26 14:26

typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs) 很显然是函数指针
这里使用 typedef 来简化定义
函数指针bool (*Compare) (Sales_item &lhs, Sales_item &rhs)
注意一定要写*Compare两边的括号,否则就成了bool *Compare (Sales_item &lhs, Sales_item &rhs)这样的返回bool指针的函数啦
下面我们举个实例
typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs);//简化定义函数指针Compare
bool fun(Sales_item &lhs, Sales_item &rhs)
{
if ((lhs+rhs)>520) //函数体
return true;
else
return false;
}
Compare sm= fun;//获取函数fun的地址给Compare指针
sm(1,2);//等值于fun(1,2);

热心网友 时间:2022-04-26 15:44

定义了一个符号 Compare,用该符号可以定义函数指针,指向一个返回bool且形参为Sales_item &lhs 和 Sales_item &rhs的函数。
可以这样用:
Compare p;
Sales_item &x,&y;
(*p)(x,y);

热心网友 时间:2022-04-26 17:19

compare是用typedef声明的函数指针类型,可用compare定义函数指针如compare compare1;
不加typedef就是声明一个叫compare的函数指针。追问怎么定义这个函数?

热心网友 时间:2022-04-26 19:10

items 没有赋值的过程呢?
stl容器可不是想象的那么简单几句代码就可以使用的
追问???关STL什么事啊

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
街头篮球手游中锋攻略汇总 C位攻略大全 街头篮球手游中锋有什么技巧 中锋C技巧详解 php一个表单提交数据怎么区分开,隐藏域可以吗,如果可以怎么用。 梦见牙掉光了什么预兆 梦见牙齿掉完了是什么征兆 梦见牙齿全掉了是什么预兆 梦见一口牙全部掉了是什么预兆 教师年度考核不认课的领导班子成员,干的工作不少,怎样考核办法公平... 湖北省郧西县义务教育学校绩效工资实施办法绩效工资总量和水平的... 事业单位年底是否有绩效奖金的 国庆节期间哪个地方人是最少的? 九阴真经3d用什么武学 九阴真经3d 天治谷和地治谷有什么区别 九阴真经3d什么装备最好 九阴真经3D唐门有什么优势 九阴真经3D唐门介绍 lhs==rhs?return 0:(lhs<rhs)?return -1:return 1;可以这么写嘛? 查询农行卡号怎么才能查到自己的银行卡号? 搜索加好友,每天限制多少? 可以不用手机注册吗 怎么注册不用手机 怎么注册不用手机号 如何申请不用手机号注册 数学裏的LHS RHS是什麼? 季度财务报表同比是什么意思,季度财务报表同比是什么 上季度财务报表报错了怎么办 谁推荐个好看的男生上班用的休闲包? 淘宝上那写仿真的GUCCI 古琦 杰克琼斯 CK 这些怎么都没了? 天津哪有卖ck男包的?佛罗伦萨小镇打几折 深圳那里有卖CK男包09男生潮流休闲男包 ck 男包怎么会是国产的 十一那里人最少? 大面镇洪河城市花园属于哪个街道办? 天府新区煎茶片区最新开发 成都龙泉驿区大面街道经开区南一路2666号琥珀庭院邮政编码 四川省成都市龙泉驿区大面街道森岭院落洋房社区(东北门)的邮编是 龙泉驿区大面街道距离成都龙泉焚烧厂有多远? 成都龙泉驿区大面街道的首创万卷属于哪个居委会? 成都市洪玉路属于哪个街道办? 成都龙泉驿区大面街道办富桥小区菜市大棚2一4怎么去 电信5G覆盖成都龙泉驿区大面街道上东阳光小区吗? 360浏览器左边主菜单上的“历史”不见了。 请问我的360浏览器上面的标题栏鼠标放上去才显示,拿下来就不显示了,怎么回事呢 我用的360浏览器,然后出现了如下情况。就是鼠标放上去没有菜单显示。 小孩开胃健脾的中成药有哪些 苹果手机用荣耀手表怎么没有音乐选项 儿童健脾胃中成药大全中哪个药不错呢?有分享的吗? 健脾和胃的中成药 C++primer中的一道习题 淘宝网上的本库铸铁炒锅质量如何?真的是无涂层吗?真的是植物油碳化工艺吗? 本库铸铁锅是你们厂生产的吗?