|
1
23
这是特里回答的补充。
我们必须做的原因
然而,右值引用完全消除了这一点。在C++ 0x中,
这更有意义。我们不复制周围的数据,而只是移动周围的数据。这甚至允许交换不可复制的类型,如流。C++0X标准草案说明了要与类型交换的类型。
本版本
以前,
也就是说:
编译器当然会去掉多余的赋值,留下:
哪个是
确切地
我们的习俗
事实上,我认为实施
至于我们是否可以
即使如此,允许
编辑:我做了一点搜索,和建议
有点令人失望。:(
编辑2:再多看看,我发现:
Defining Move Special Member Functions
这是最近的,看起来我们可以违约
|
|
|
2
11
当stl算法使用swap时,它是一个自由函数。
. 有一个默认的交换实现:
如果可以做得更好,您应该专门化std::swap(位于UDT旁边的名称空间中,因此ADL可以找到它)。只遵从成员交换函数是惯用的方法。 当我们在这个主题上时,C++中的习惯用法(尽可能地在这样的新标准上有成语)也可以将R值构造函数作为交换来实现。 是的,在一个成员交换是语言设计而不是自由函数交换的世界中,这意味着我们需要一个交换运算符而不是函数,否则就不能对原始类型(in t、float等)进行一般性的处理(因为它们没有成员函数交换)。他们为什么不这么做?你必须向委员会成员保证——但我有95%的把握,原因是委员会一直以来都倾向于尽可能地实现特性库,而不是发明新的语法来实现特性。交换运算符的语法会很奇怪,因为与=、+、-等以及所有其他运算符不同,没有任何代数运算符人人都熟悉“交换”。 C++在语法上是足够复杂的。他们竭尽全力不添加任何可能的新关键字或语法特性,并且这样做只是出于非常好的理由(lambdas!). |
|
|
3
2
向比亚恩发送电子邮件。他知道所有这些事情,通常会在几个小时内回复。 |
|
|
4
1
甚至编译器生成的移动构造函数/分配是否计划(使用 违约 关键字?
即使成语在例外情况下使对象保持不变,但这个成语是否要求创建第三个对象,从而使失败的机会在第一时间更大? 还有可能会影响性能(复制可能比“分配”更昂贵),这就是为什么我看不到编译器可以实现如此复杂的功能。
一般来说,我不重载operator=也不担心异常安全级别:我不将单个任务包装到try块中-我最可能如何处理
|
|
dallin · 数组中的逗号运算符是否有名称? 12 年前 |