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

2016-08-08 18:33:43 +08:00
 AscenZ

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

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

2577 次点击
所在节点    C
18 条回复
ljcarsenal
2016-08-08 18:44:44 +08:00
Swap 定义是啥……多年不写 cpp 了 swap 难道成为 iostream 的标准库函数了?
kingddc314
2016-08-08 18:58:32 +08:00
没加 C++11 编译选项吧
AscenZ
2016-08-08 19:03:54 +08:00
@ljcarsenal
这个 swap 用的是 std 里面的吧

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

最后,我也不知道是什么问题,我重新建 了个项目然后编译就交换了,重新打开这个项目就是不行,尴尬
shyling
2016-08-08 19:05:20 +08:00
我怎么记得好多源码里的 swap 都是自己写的。。。
Guaidaodl
2016-08-08 19:07:33 +08:00
话说根据我浅薄的 C++知识告诉我, 你传的不是指针也不是引用. 不可能交换成功的.
Troevil
2016-08-08 19:09:39 +08:00
传的是值吧.. 又不是指针或引用
kingddc314
2016-08-08 19:11:08 +08:00
@Guaidaodl 传不传引用是看不出来的,得看函数实现。。

@AscenZ 这确实是 C++11 才有的 std:: swap 函数
AscenZ
2016-08-08 19:13:24 +08:00
@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
2016-08-08 19:14:19 +08:00
@kingddc314 也是, 太久没有写 CPP 了.
AscenZ
2016-08-08 19:15:19 +08:00
@kingddc314 好吧,但是跟这个关系不大,前面用了挺多 c++11 的特性都没问题
hitmanx
2016-08-08 19:54:45 +08:00
话说你试过如果特化一个 swap 加到 std 里能过吗?
namespace std{
template<>
void swap<int>(int&a , int&b)
{
...
}
}
hitmanx
2016-08-08 20:07:36 +08:00
刚才拿 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
2016-08-08 21:54:45 +08:00
@Guaidaodl 和你的想法一样。楼主这是怎么交换成功的
lifanxi
2016-08-08 22:12:58 +08:00
重现不了这个问题。
楼主可以直接用 IDE 跟进 swap 函数看看是怎么定义的,或者 Debug 时单步跟踪进 swap 看看怎么回事。
可能是原来的项目里有自己定义的一个 swap 函数覆盖了标准库里的?
mxi1
2016-08-08 22:29:04 +08:00
@arrow2015 c++ algorithm namespace 定义了 swap 函数,它的参数是传引用的,不是传值的。
msg7086
2016-08-09 05:11:24 +08:00
项目文件拿出来 diff 一下?
tairan2006
2016-08-09 10:37:33 +08:00
虽然很久没写 C++大致记得是传引用,楼主的写法没错。

http://www.cplusplus.com/reference/algorithm/swap/
cppgohan
2016-08-09 11:44:16 +08:00
项目文件拿出来 diff 一下? +1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX