草庐IT

CMP_SWAP

全部标签

c++ - 你应该在 std 命名空间中重载 swap 吗?

我今天读到一些有趣的东西,说在用户提供的类型(作为模板参数提供)上调用swap的“标准”方式是......usingstd::swap;swap(something,soemthingelse);这样做的原因是使用参数依赖查找来使用用户命名空间中的swap函数或std中的swap>命名空间。这对我提出了一个感兴趣的问题。当我为我的一个类重载std::swap时,我实际上是在std命名空间中定义它...namespacestd{voidswap(/*...*/){/*...*/}}。这种做法错误吗?我应该在std中定义自己的swap还是自己的命名空间(以及为什么)?

c++ - 你应该在 std 命名空间中重载 swap 吗?

我今天读到一些有趣的东西,说在用户提供的类型(作为模板参数提供)上调用swap的“标准”方式是......usingstd::swap;swap(something,soemthingelse);这样做的原因是使用参数依赖查找来使用用户命名空间中的swap函数或std中的swap>命名空间。这对我提出了一个感兴趣的问题。当我为我的一个类重载std::swap时,我实际上是在std命名空间中定义它...namespacestd{voidswap(/*...*/){/*...*/}}。这种做法错误吗?我应该在std中定义自己的swap还是自己的命名空间(以及为什么)?

c++ - Copy-and-Swap 成语是否应该成为 C++11 中的 Copy-and-Move 成语?

如thisanswer中所述,copy-and-swap习语的实现方式如下:classMyClass{private:BigClassdata;UnmovableClass*dataPtr;public:MyClass():data(),dataPtr(newUnmovableClass){}MyClass(constMyClass&other):data(other.data),dataPtr(newUnmovableClass(*other.dataPtr)){}MyClass(MyClass&&other):data(std::move(other.data)),dataPtr(

c++ - Copy-and-Swap 成语是否应该成为 C++11 中的 Copy-and-Move 成语?

如thisanswer中所述,copy-and-swap习语的实现方式如下:classMyClass{private:BigClassdata;UnmovableClass*dataPtr;public:MyClass():data(),dataPtr(newUnmovableClass){}MyClass(constMyClass&other):data(other.data),dataPtr(newUnmovableClass(*other.dataPtr)){}MyClass(MyClass&&other):data(std::move(other.data)),dataPtr(

c++ - 为什么这个对 swap() 的调用模棱两可?

下面的程序#include#include#includenamespacemy_namespace{templatevoidswap(T&a,T&b){Ttmp=std::move(a);a=std::move(b);b=std::move(tmp);}template>classfoo{};}intmain(){my_namespace::foo*a,*b;usingmy_namespace::swap;swap(a,b);return0;}导致g++和clang在我的系统上发出以下编译器错误:$clang-std=c++11swap_repro.cpp-I.swap_repro.

c++ - 为什么这个对 swap() 的调用模棱两可?

下面的程序#include#include#includenamespacemy_namespace{templatevoidswap(T&a,T&b){Ttmp=std::move(a);a=std::move(b);b=std::move(tmp);}template>classfoo{};}intmain(){my_namespace::foo*a,*b;usingmy_namespace::swap;swap(a,b);return0;}导致g++和clang在我的系统上发出以下编译器错误:$clang-std=c++11swap_repro.cpp-I.swap_repro.

python - 是否有关于 __cmp__ 如何在 Python 2 中对 dict 对象起作用的描述?

我一直在尝试创建一个继承自UserDict.DictMixin的dict子类,该子类支持非哈希键。性能不是问题。不幸的是,Python通过尝试从子类创建dict对象来实现DictMixin中的一些函数。我可以自己实现这些,但我卡在__cmp__。我找不到dict类的内置__cmp__使用的逻辑的简明描述。 最佳答案 如果您要问比较字典的工作原理,那就是:要比较字典A和B,首先比较它们的长度。如果它们不相等,则返回cmp(len(A),len(B))。接下来,找到A中的键adiff,它是adiff不在B或A[adiff]!=B[adi

python - 是否有关于 __cmp__ 如何在 Python 2 中对 dict 对象起作用的描述?

我一直在尝试创建一个继承自UserDict.DictMixin的dict子类,该子类支持非哈希键。性能不是问题。不幸的是,Python通过尝试从子类创建dict对象来实现DictMixin中的一些函数。我可以自己实现这些,但我卡在__cmp__。我找不到dict类的内置__cmp__使用的逻辑的简明描述。 最佳答案 如果您要问比较字典的工作原理,那就是:要比较字典A和B,首先比较它们的长度。如果它们不相等,则返回cmp(len(A),len(B))。接下来,找到A中的键adiff,它是adiff不在B或A[adiff]!=B[adi

python - Python 的 cmp_to_key 函数是如何工作的?

我遇到了这个函数here.我很困惑这将如何实现-cmp_to_key生成的key函数如何知道给定元素应该是什么“位置”而不检查如何给定元素与所有其他感兴趣的元素进行比较? 最佳答案 cmp_to_key方法返回一个充当代理键的特殊对象:classK(object):__slots__=['obj']def__init__(self,obj,*args):self.obj=objdef__lt__(self,other):returnmycmp(self.obj,other.obj)0def__eq__(self,other):ret

python - Python 的 cmp_to_key 函数是如何工作的?

我遇到了这个函数here.我很困惑这将如何实现-cmp_to_key生成的key函数如何知道给定元素应该是什么“位置”而不检查如何给定元素与所有其他感兴趣的元素进行比较? 最佳答案 cmp_to_key方法返回一个充当代理键的特殊对象:classK(object):__slots__=['obj']def__init__(self,obj,*args):self.obj=objdef__lt__(self,other):returnmycmp(self.obj,other.obj)0def__eq__(self,other):ret