有用 Clion 的吗?话说为什么 swap( ) 不起作用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lightzh
V2EX    C

有用 Clion 的吗?话说为什么 swap( ) 不起作用?

  •  
  •   lightzh 2016 年 8 月 8 日 3163 次点击
    这是一个创建于 3503 天前的主题,其中的信息可能已经有所发展或是发生改变。

    OS X10.11,CLion1.2.2,Xocde7 今天写一些小练习用到了 swap( ),但是没反应,是跟 CMake 之类的有关系吗?运行和调试都一样 2016-08-08_18:28:38.jpg 然后我用 Xcode 试了一下,完全没问题啊,换了 GNU 和 LLVM 都试了一下,都没问题 2016-08-08_18:29:25.jpg

    话说 CLion 跟 Xcode 编译有区别吗?对 CMake , LLVM 那些了解略少

    18 条回复    2016-08-09 11:44:16 +08:00
    ljcarsenal
        1
    ljcarsenal  
       2016 年 8 月 8 日 via Android   1
    Swap 定义是啥……多年不写 cpp 了 swap 难道成为 iostream 的标准库函数了?
    kingddc314
        2
    kingddc314  
       2016 年 8 月 8 日 via Android   1
    没加 C++11 编译选项吧
    lightzh
        3
    lightzh  
    OP
       2016 年 8 月 8 日
    @ljcarsenal
    这个 swap 用的是 std 里面的吧

    @kingddc314
    不是啊,前面有用到挺多 11 的特性的

    最后,我也不知道是什么问题,我重新建 了个项目然后编译就交换了,重新打开这个项目就是不行,尴尬
    shyling
        4
    shyling  
       2016 年 8 月 8 日
    我怎么记得好多源码里的 swap 都是自己写的。。。
    Guaidaodl
        5
    Guaidaodl  
       2016 年 8 月 8 日
    话说根据我浅薄的 C++知识告诉我, 你传的不是指针也不是引用. 不可能交换成功的.
    Troevil
        6
    Troevil  
       2016 年 8 月 8 日
    传的是值吧.. 又不是指针或引用
    kingddc314
        7
    kingddc314  
       2016 年 8 月 8 日 via Android   1
    @Guaidaodl 传不传引用是看不出来的,得看函数实现。。

    @AscenZ 这确实是 C++11 才有的 std:: swap 函数
    lightzh
        8
    lightzh  
    OP
       2016 年 8 月 8 日
    @Guaidaodl
    。。。。。。
    我重新建了个项目就成功了, Xcode 也能成功,原项目的问题,具体什么问题我也不太清楚
    swap 有很多种啊
    ![2016-08-08_19:12:34.jpg]( http://7xsnb0.com1.z0.glb.clouddn.com/2016-08-08_19:12:34.jpg)
    Guaidaodl
        9
    Guaidaodl  
       2016 年 8 月 8 日
    @kingddc314 也是, 太久没有写 CPP 了.
    lightzh
        10
    lightzh  
    OP
       2016 年 8 月 8 日
    @kingddc314 好吧,但是跟这个关系不大,前面用了挺多 c++11 的特性都没问题
    hitmanx
        11
    hitmanx  
       2016 年 8 月 8 日
    话说你试过如果特化一个 swap 加到 std 里能过吗?
    namespace std{
    template<>
    void swap<int>(int&a , int&b)
    {
    ...
    }
    }
    hitmanx
        12
    hitmanx  
       2016 年 8 月 8 日   1
    刚才拿 clion 试了下,好像没发现这个问题. cmake 中在创建新项目时默认已经加了"-std=c++11"的编译选项,但是我试了下把它拿掉也可以正常编译和运行。查了下 cppreference ( http://en.cppreference.com/w/cpp/algorithm/swap ),和我记忆中是一样的,这种 POD 类型的 swap 支持并不需要 c++11 的,因为这种类型就是一个很简单的默认的以值方式的三次拷贝就能实现,似乎并没有什么特化提升的余地,大概像:

    namespace std{

    template <typename T>
    void swap(T& val1, T& val2)
    {
    T temp(val1);
    val1 = val2;
    val2 = temp;
    }

    }
    arrow2015
        13
    arrow2015  
       2016 年 8 月 8 日 via Android
    @Guaidaodl 和你的想法一样。楼主这是怎么交换成功的
    lifanxi
        14
    lifanxi  
       2016 年 8 月 8 日
    重现不了这个问题。
    楼主可以直接用 IDE 跟进 swap 函数看看是怎么定义的,或者 Debug 时单步跟踪进 swap 看看怎么回事。
    可能是原来的项目里有自己定义的一个 swap 函数覆盖了标准库里的?
    mxi1
        15
    mxi1  
       2016 年 8 月 8 日
    @arrow2015 c++ algorithm namespace 定义了 swap 函数,它的参数是传引用的,不是传值的。
    msg7086
        16
    msg7086  
       2016 年 8 月 9 日
    项目文件拿出来 diff 一下?
    tairan2006
        17
    tairan2006  
       2016 年 8 月 9 日
    虽然很久没写 C++大致记得是传引用,楼主的写法没错。

    http://www.cplusplus.com/reference/algorithm/swap/
    cppgohan
        18
    cppgohan  
       2016 年 8 月 9 日
    项目文件拿出来 diff 一下? +1
    /div>
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3457 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 12:56 PVG 20:56 LAX 05:56 JFK 08:56
    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