V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ivito
V2EX  ›  C

如何理解 ((i>0) ? i : j) = 1;

  •  
  •   ivito · 2017-12-20 19:32:39 +08:00 · 3622 次点击
    这是一个创建于 2562 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2017-12-21 17:50:40 +08:00
    gclove
        1
    gclove  
       2017-12-20 19:35:34 +08:00
    理解不了.. i 和 j 没有声明吗 ?
    YMB
        2
    YMB  
       2017-12-20 19:36:43 +08:00
    c = (i>0)?i:j;// c=i || c=j
    c=1;
    emmmm...
    hitmanx
        3
    hitmanx  
       2017-12-20 19:39:06 +08:00
    还能这样写啊?。。
    ((i>0) ? i : j)这个返回的是左值?
    shoujiaxin
        4
    shoujiaxin  
       2017-12-20 19:39:31 +08:00 via iPhone
    i 大于 0 就把 1 赋给 i,否则赋给 j ?
    QAPTEAWH
        5
    QAPTEAWH  
       2017-12-20 19:40:21 +08:00 via iPhone
    @hitmanx 是的,返回的是引用
    geelaw
        6
    geelaw  
       2017-12-20 19:41:39 +08:00
    if (i > 0) i = 1; else j = 1;

    这个对 C 似乎无效。
    hitmanx
        7
    hitmanx  
       2017-12-20 19:42:36 +08:00   ❤️ 2
    搜了一下,还真有人讨论 ternary operator expression 是不是 lvalue 的:https://www.reddit.com/r/ProgrammerTIL/comments/4zr491/c_a_ternary_operator_expression_is_an_lvalue/?st=jbezlb70&sh=ff573171

    这个写法估计代码 review 的时候会被喷
    fatttt
        8
    fatttt  
       2017-12-20 19:51:47 +08:00 via Android
    不用理解,找写代码回来返工。
    IamJ
        9
    IamJ  
       2017-12-20 20:19:40 +08:00 via iPhone
    要是组里谁写出这样的代码我打断他狗腿
    LGA1150
        10
    LGA1150  
       2017-12-20 21:30:16 +08:00
    gcc 编译报错,g++ 正常编译并执行
    版本 5.4.0 x86_64-linux-gnu
    Terry05
        11
    Terry05  
       2017-12-20 21:45:55 +08:00
    先不论这条语句执行结果有不有报错,这种让大多数人阅读起来有困难,或是有岐义的代码,在实际项目开发过程就是要尽量避免的,总保不准某些代码最终就交接到了刚毕业的新人手上

    这种类似于 “炫技” 的代码,要么可以在开源插件里使用,以表示作者的高超水平,要么最好就面试题里,教科书里弄弄就好,做项目就是要尽量避免给自己给别人挖坑
    lrxiao
        12
    lrxiao  
       2017-12-21 01:57:39 +08:00
    ternary 首先要是同类型不然会做 common_type 转换成 rvalue
    lrxiao
        13
    lrxiao  
       2017-12-21 01:59:43 +08:00
    c 语法就不支持这种
    Tink
        14
    Tink  
       2017-12-21 02:07:34 +08:00 via iPhone
    为了三目而三目
    amai
        15
    amai  
       2017-12-21 08:09:23 +08:00
    三元判断
    print1024
        16
    print1024  
       2017-12-21 08:21:09 +08:00
    等价于 if (i>0){i=1}else{j=1}
    ray8888
        17
    ray8888  
       2017-12-21 08:35:44 +08:00
    写这种代码有什么意思,没有一点易读性
    dumplinger
        18
    dumplinger  
       2017-12-21 09:45:52 +08:00
    @hitmanx 噗,不是左值……
    canxden
        19
    canxden  
       2017-12-21 11:22:56 +08:00
    Expression is not assignable
    hackpro
        20
    hackpro  
       2017-12-21 14:29:34 +08:00
    @lrxiao #12 正解
    而且这代码 rvalue 还能赋值?
    yaowenz
        21
    yaowenz  
       2017-12-21 17:50:40 +08:00
    写的人拉出去枪毙
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1243 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.