本文共 2334 字,大约阅读时间需要 7 分钟。
#define swap(a,b) { /
(a) ^= (b); / (b) ^= (a); / (a) ^= (b); / }
#define swap(a,b) { /
(a) += (b); / (b) = (a) - (b); / (a) -= (b); / }
More slick expression
#define swap(a,b) { a ^= b ^= a ^= b; } But here http://c-faq.com/cpp/swapmacro.html. It seems it is not a good way to use a macro . ------------------------------------------------------------------------------------------------------------------------------------------------ There is no good answer to this question. If the values are integers, a well-known trick using exclusive-OR could perhaps be used, but it will not work for floating-point values or pointers, or if the two values are the same variable. (See questions and .) If the macro is intended to be used on values of arbitrary type (the usual goal), any solution involving a temporary variable is problematical, because:
The best all-around solution is probably to forget about using a macro, unless you're willing to pass in the type as a third argument. (Also, if you're trying to swap entire structures or arrays, you probably want to exchange pointers instead.) If you're worried about the use of an ugly temporary, and know that your machine provides an efficient exchange instruction, convince your compiler vendor to recognize the standard three-assignment swap idiom in the optimization phase.
If you're consumed by a passionate desire to solve this problem once and for all, please reconsider; there are better problems worthier of your energies.
转载地址:http://nhmvi.baihongyu.com/