【求指教】为什么PHP的这2个加法运算结果为什么都是3?

d4shman 2013-10-21 10:33:19
<?php 
$a = 1;
$c = $a+$a++;
var_dump($c); // result:3

$a = 1;
$c = $a+$a+$a++;
var_dump($c); //result:3


我的理解:第一个结果应该是2,第二个结果应该是3
打印输出:
int 3
int 3
...全文
91 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
d4shman 2013-10-21
引用 7 楼 foolbirdflyfirst 的回复:
怎么发现好多个帖子都讨论这种问题。 维基百科: 在计算机编程中,未定义行为(英语:Undefined behavior)是指行为不可预测的计算机代码。这是一些编程语言的一个特点,最有名的是在C语言中。[1]在这些语言中,为了简化标准,并给予实现一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。
又学到了很多,谢谢!!!
回复
foolbirdflyfirst 2013-10-21
怎么发现好多个帖子都讨论这种问题。 维基百科: 在计算机编程中,未定义行为(英语:Undefined behavior)是指行为不可预测的计算机代码。这是一些编程语言的一个特点,最有名的是在C语言中。[1]在这些语言中,为了简化标准,并给予实现一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。
回复
d4shman 2013-10-21
引用 3 楼 wusuopuBUPT 的回复:
[quote=引用 1 楼 xuzuning 的回复:] 按照 php 的语法说明,你的理解是正确的 而实际运行结果却不是这样的,于是你可以认为这是 php 的一个 bug 只是这个 bug 也可能是有意为之,因为 C 语言中就是这样的
版主,C中好像不是这样哦:
#include<stdio.h>
int main() {
    int a = 1;
    printf("a=%d\n",a+a++);
    a = 1;
    printf("a=%d\n",a+a+a++);
    return 0;
}
输出:
a=2
a=3
[/quote] 奇怪。。我这也不是C++呀
回复
xuzuning 2013-10-21
回复
xuzuning 2013-10-21
你这是 C++,我说的是 C
回复
d4shman 2013-10-21
引用 1 楼 xuzuning 的回复:
按照 php 的语法说明,你的理解是正确的 而实际运行结果却不是这样的,于是你可以认为这是 php 的一个 bug 只是这个 bug 也可能是有意为之,因为 C 语言中就是这样的
版主,C中好像不是这样哦:
#include<stdio.h>
int main() {
    int a = 1;
    printf("a=%d\n",a+a++);
    a = 1;
    printf("a=%d\n",a+a+a++);
    return 0;
}
输出:
a=2
a=3
回复
d4shman 2013-10-21
引用 1 楼 xuzuning 的回复:
按照 php 的语法说明,你的理解是正确的 而实际运行结果却不是这样的,于是你可以认为这是 php 的一个 bug 只是这个 bug 也可能是有意为之,因为 C 语言中就是这样的
谢谢版大!发帖之前看过您以前回复过的帖子http://bbs.csdn.net/topics/390571704,但是还是不懂,所以又发了一下,谢谢~~
回复
xuzuning 2013-10-21
按照 php 的语法说明,你的理解是正确的 而实际运行结果却不是这样的,于是你可以认为这是 php 的一个 bug 只是这个 bug 也可能是有意为之,因为 C 语言中就是这样的
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告