注册 登录
编程论坛 C++教室

[求助]什么叫边际效应?

ioriliao 发布于 2007-06-18 20:27, 7328 次点击

我看到一文章解说const和define时提到define会有边际效应,这个边际效应是什么意思?

原文的一段话:
(1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

原文地址:https://www.bc-cn.net/Article/kfyy/cjj/jc/200512/2632.html

经济学中是这么解释边际效应的:

什么是边际效应呢?边际效应,有时也称为边际贡献,是指消费者在逐次增加一个单位消费品的时候,带来的单位效用是逐渐递减的(虽然带来的总效用仍然是增加的)。

边际效应的应用非常广泛,例如经济学上的需求法则就是以此为依据,即:用户购买或使用商品数量越多,则其愿为单位商品支付的成本越低(因为后购买的商品对其带来的效用降低了)。当然也有少数例外情况,例如嗜酒如命的人,越喝越高兴,或者集邮爱好者收藏一套文革邮票,那么这一套邮票中最后收集到的那张邮票的边际效应是最大的。

举一个例子,大家可能就比较生动地能够理解了。比如说我们在饿了的时候,给你拿了一盘包子,你在吃的时候,第一个,乃至第五个非常香,最后吃饱了,剩下几个包子还想吃,觉得不太好,一点好的感觉都没有。就是这个,物质消费达到了一定的程度,人们就开始对这种状况的消费会产生一种厌倦的心理。


好像用经济学中的边际效应解释不对头!

19 回复
#2
野比2007-06-18 21:45
貌似经济学的edge effect是压死骆驼的那根稻草...

我的理解...是这个意思
比如
#define FUNC(X,Y) X+Y
void main(){
int a=FUNC(1,2)*FUNC(3,4);
}
结果预处理出来成这个了:
int a=1+2*3+4; //不是想要的(1+2)*(3+4)

...我乱说的, 不对不负责哦..
#3
ioriliao2007-06-18 21:53

呵呵...野比只是说明白了用define的副作用,没用抽象出边际效应是什么...
我仍是不明白什么叫边际效应!

#4
野比2007-06-18 22:00
水平太低, 抽不出啥来... 你看副作用不就是因为define的边界没有闭合造成的吗...
牵强附会一下.... 乱说的.. 表打我...
#5
I喜欢c2007-06-18 22:20
因为宏常量没有数据类型,所以可能出现类型不匹配

至于 边际效应 例子 暂时还没有好的...
#6
I喜欢c2007-06-18 22:23
其实我觉得你的帖子已经解释了 边际效应

边际效应:只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误

就这样.....
#7
ioriliao2007-06-18 22:28
呵呵...程序是解释了边际效应的结果,而没有定义什么叫边际效应.
一种定义会有多种现在体现的.
#8
野比2007-06-18 22:50
我翻了翻C++'98没有啥边际效应...还是没找着.. 等待神仙..指路..
#9
ioriliao2007-06-18 22:55
边际效应这词是出现在高质量C++/C编程指南里的.
https://www.bc-cn.net/Article/kfyy/cjj/jc/200512/2632.html
#10
龙飞2007-06-19 00:06
好难理解。。。
#11
蛙蛙2007-06-19 09:14

C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:

const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

#12
ioriliao2007-06-19 10:09
以下是引用蛙蛙在2007-6-19 9:14:38的发言:

C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:

const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

这是边际效应的一种实例,不是边际效应的定义,
class point //这是定义
{
}

point xy; //这是实例

#13
anthony6342007-06-19 13:24

副作用

#14
ioriliao2007-06-19 13:33
还是没有人把它抽象出来....
#15
anthony6342007-06-19 13:56

看来你很有意思搞汉语哦,努力!!

#16
anthony6342007-06-19 13:59
我抽一个: 运动产生单位衰减。
#17
ioriliao2007-06-19 17:53
以下是引用anthony634在2007-6-19 13:56:43的发言:

看来你很有意思搞汉语哦,努力!!

呵呵...以前确是想过,不过不是倾向文学的,而是数据挖掘方面的...
或者你会觉得我发的这个贴的问题离题了.读书有两种,一种是浏览
一种是细读,学习程序设计的人也有两种,一种是以应用为主的,一种
是研究程序设计语言本身问题的.应用只需要知道可以怎样
不可以怎么样.而不必去知道为什么可以这样,为什么不可以这样.

#18
野比2007-06-19 19:40
加油
#19
yejinglingpro2008-07-26 08:10
顶上去
#20
kevin882008-10-02 10:01
回复 2# 野比 的帖子
#define FUNC(X,Y) (X)+(Y)
应该是这样吧,在宏中,所有的变量都应加上括号,因为他们有可能是一个表达式。
1