一个++x 的疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
ha2ha

一个++x 的疑问

  •  
  •   ha2ha Dec 3, 2021 3673 views
    This topic created in 1606 days ago, the information mentioned may be changed or developed.
    int x=5;
    int y=(++x)+(++x)+(++x);
    为什么在 c++里面是 22 ,而在 java 里面是 21 ;
    28 replies    2021-12-04 00:33:38 +08:00
    thevita
        1
    thevita  
       Dec 3, 2021
    啥 c++

    天王老子来了也是 21
    power100
        2
    power100  
       Dec 3, 2021
    vc2022 的结果是 24 ,跟编译器有关,有兴趣可以看下汇编,日常代码一般也不会这么写。
    yuzo555
        3
    yuzo555  
       Dec 3, 2021
    梦回大一
    geekfxxk
        4
    geekfxxk  
       Dec 3, 2021   5
    这个要问谭浩强
    gaodq
        5
    gaodq  
       Dec 3, 2021
    c++标准未定义的行为
    constexpr
        6
    constexpr  
       Dec 3, 2021   1
    g++给出 warning: operation on 'x' may be undefined

    c/c++中, 在同一个表达式中即访问又改变变量是未定义行为. 而 java 的好像是标准有定义的.
    yinanc
        7
    yinanc  
       Dec 3, 2021   1
    梦回谭浩强
    constexpr
        8
    constexpr  
       Dec 3, 2021
    @constexpr 补充一下, g++给出结果是 22, clang 给出结果是 21,另外 clang 给出 warning: multiple unsequenced modifications to 'x' .
    mxT52CRuqR6o5
        9
    mxT52CRuqR6o5  
       Dec 3, 2021
    shintendo
        10
    shintendo  
       Dec 3, 2021   1
    标准未定义行为。未定义的意思就是编译器怎么结算都对,没有标准答案,不用在这种问题浪费时间,不要这样写代码,如果这是考试题那祝你好运。
    deplivesb
        11
    deplivesb  
       Dec 3, 2021
    这种 ub 有啥意思
    icyalala
        12
    icyalala  
       Dec 3, 2021   1
    这种日经贴...
    如果不管 UB 非要看结果的话, godbolt 上 MSVC 是 24, Clang 和 ICC 是 21, GCC 是 22
    raycool
        13
    raycool  
       Dec 3, 2021
    纠结这个没意义
    梦回谭浩强
    mxT52CRuqR6o5
        14
    mxT52CRuqR6o5  
    &nbs;  Dec 3, 2021
    js 把好多 C 语言中的 ub 给规定出标准来得到确定的行为,估计是方便用户优化
    (不去规范 ub 可能会导致不同的 js jit 引擎使用不同的方案优化)
    Jooooooooo
        15
    Jooooooooo  
       Dec 3, 2021
    不要学这个, 讲这种东西的书也不要再学了. 时间花在更好的地方.

    就算这是一个合法的行为, 你代码也不应该这么写. 这种题目, 让人得知原来代码还能这么写, 害人不浅.
    ayase252
        16
    ayase252  
       Dec 3, 2021 via iPhone   4
    建议标准规定这样写的语义是格式化硬盘
    xz410236056
        17
    xz410236056  
       Dec 3, 2021
    不同编译器 不同 C++有可能不一样,你别在这整谭浩强 那种不符合规范的代码,毫无意义
    joshu
        18
    joshu  
       Dec 3, 2021
    未指明的行为( unspecified behavior )程序的行为随实现而变动,且遵从标准的实现不需要为每个行为的效果提供文档。例如求值顺序,等同的字符串字面量是否为不同的对象,数组分配的开销,等等。每个未指明行为均产生合法结果集合中的一个结果。
    https://zh.cppreference.com/w/cpp/language/eval_order
    NVDA
        19
    NVDA  
       Dec 3, 2021
    Don’t waste your time on such bs
    binfun
        20
    binfun  
       Dec 3, 2021
    我也有个疑问:
    a += ++b+++++c++
    anxxv2
        21
    anxxv2  
       Dec 3, 2021 via iPhone
    22 是咋来的?
    Leonard
        22
    Leonard  
       Dec 3, 2021
    有些地方尽喜欢考这种垃圾写法的题
    cclin
        23
    cclin  
       Dec 3, 2021 via Android
    @anxxv2 2*7+8
    mainjzb
        24
    mainjzb  
       Dec 3, 2021   1
    所以 go 禁止++嵌套写法
    Croxx
        25
    Croxx  
       Dec 3, 2021 via iPhone
    讲道理你敢写这样的代码,老板就敢给你开掉。
    smdbh
        26
    smdbh  
       Dec 3, 2021   1
    又搞回字
    AdminNB
        27
    AdminNB  
       Dec 3, 2021
    未定义行为( UB )
    Zien
        28
    Zien  
       Dec 4, 2021 via iPhone
    谭浩强 孔乙己 为让人内耗而设计的无意义
    About     Help     Advertise     Blog     API     FAQ     Solana     1041 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 74ms UTC 22:44 PVG 06:44 LAX 15:44 JFK 18:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86