• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ha2ha
V2EX  ›  程序员

一个++x 的疑问

  •  
  •   ha2ha · Dec 3, 2021 · 4185 views
    This topic created in 1797 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
    thevita
    Dec 3, 2021
    1
    啥 c++

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

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

    就算这是一个合法的行为, 你代码也不应该这么写. 这种题目, 让人得知原来代码还能这么写, 害人不浅.
    ayase252
    ayase252
    Dec 3, 2021 via iPhone❤️4
    16
    建议标准规定这样写的语义是格式化硬盘
    xz410236056
    xz410236056
    Dec 3, 2021
    17
    不同编译器 不同 C++有可能不一样,你别在这整谭浩强 那种不符合规范的代码,毫无意义
    joshu
    joshu
    Dec 3, 2021
    18
    未指明的行为( unspecified behavior )——程序的行为随实现而变动,且遵从标准的实现不需要为每个行为的效果提供文档。例如求值顺序,等同的字符串字面量是否为不同的对象,数组分配的开销,等等。每个未指明行为均产生合法结果集合中的一个结果。
    https://zh.cppreference.com/w/cpp/language/eval_order
    NVDA
    NVDA
    Dec 3, 2021
    19
    Don’t waste your time on such bs
    binfun
    binfun
    Dec 3, 2021
    20
    我也有个疑问:
    a += ++b+++++c++
    anxxv2
    anxxv2
    Dec 3, 2021 via iPhone
    21
    22 是咋来的?
    Leonard
    Leonard
    Dec 3, 2021
    22
    有些地方尽喜欢考这种垃圾写法的题
    cclin
    cclin
    Dec 3, 2021 via Android
    23
    @anxxv2 2*7+8
    mainjzb
    mainjzb
    Dec 3, 2021❤️1
    24
    所以 go 禁止++嵌套写法
    Croxx
    Croxx
    Dec 3, 2021 via iPhone
    25
    讲道理你敢写这样的代码,老板就敢给你开掉。
    smdbh
    smdbh
    Dec 3, 2021❤️1
    26
    又搞回字
    AdminNB
    AdminNB
    Dec 3, 2021
    27
    未定义行为( UB )
    Zien
    Zien
    Dec 4, 2021 via iPhone
    28
    谭浩强 孔乙己 为让人内耗而设计的无意义
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5042 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 07:40 · PVG 15:40 · LAX 23:40 · JFK 02:40
    ♥ Do have faith in what you're doing.