OS X10.11,CLion1.2.2,Xocde7 今天写一些小练习用到了 swap( ),但是没反应,是跟 CMake 之类的有关系吗?运行和调试都一样 然后我用 Xcode 试了一下,完全没问题啊,换了 GNU 和 LLVM 都试了一下,都没问题
话说 CLion 跟 Xcode 编译有区别吗?对 CMake , LLVM 那些了解略少
1
ljcarsenal 2016-08-08 18:44:44 +08:00 via Android 1
Swap 定义是啥……多年不写 cpp 了 swap 难道成为 iostream 的标准库函数了?
|
2
kingddc314 2016-08-08 18:58:32 +08:00 via Android 1
没加 C++11 编译选项吧
|
3
AscenZ OP @ljcarsenal
这个 swap 用的是 std 里面的吧 @kingddc314 不是啊,前面有用到挺多 11 的特性的 最后,我也不知道是什么问题,我重新建 了个项目然后编译就交换了,重新打开这个项目就是不行,尴尬 |
4
shyling 2016-08-08 19:05:20 +08:00
我怎么记得好多源码里的 swap 都是自己写的。。。
|
5
Guaidaodl 2016-08-08 19:07:33 +08:00
话说根据我浅薄的 C++知识告诉我, 你传的不是指针也不是引用. 不可能交换成功的.
|
6
Troevil 2016-08-08 19:09:39 +08:00
传的是值吧.. 又不是指针或引用
|
7
kingddc314 2016-08-08 19:11:08 +08:00 via Android 1
|
8
AscenZ OP @Guaidaodl
。。。。。。 我重新建了个项目就成功了, Xcode 也能成功,原项目的问题,具体什么问题我也不太清楚 swap 有很多种啊 ![2016-08-08_19:12:34.jpg]( http://7xsnb0.com1.z0.glb.clouddn.com/2016-08-08_19:12:34.jpg) |
9
Guaidaodl 2016-08-08 19:14:19 +08:00
@kingddc314 也是, 太久没有写 CPP 了.
|
10
AscenZ OP @kingddc314 好吧,但是跟这个关系不大,前面用了挺多 c++11 的特性都没问题
|
11
hitmanx 2016-08-08 19:54:45 +08:00
话说你试过如果特化一个 swap 加到 std 里能过吗?
namespace std{ template<> void swap<int>(int&a , int&b) { ... } } |
12
hitmanx 2016-08-08 20:07:36 +08:00 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; } } |
14
lifanxi 2016-08-08 22:12:58 +08:00
重现不了这个问题。
楼主可以直接用 IDE 跟进 swap 函数看看是怎么定义的,或者 Debug 时单步跟踪进 swap 看看怎么回事。 可能是原来的项目里有自己定义的一个 swap 函数覆盖了标准库里的? |
16
msg7086 2016-08-09 05:11:24 +08:00
项目文件拿出来 diff 一下?
|
17
tairan2006 2016-08-09 10:37:33 +08:00
|
18
cppgohan 2016-08-09 11:44:16 +08:00
项目文件拿出来 diff 一下? +1
|