Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/165.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/cplusplus11/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中选择复制和交换或分别定义复制/移动赋值运算符+;_C++_C++11 - Fatal编程技术网

C++ 如何在C+中选择复制和交换或分别定义复制/移动赋值运算符+;

C++ 如何在C+中选择复制和交换或分别定义复制/移动赋值运算符+;,c++,c++11,C++,C++11,我知道使用复制和交换来定义赋值运算符可以确保异常安全性并避免自赋值。 但是,当使用大量移动指定时,复制和交换将导致性能浪费: 何时应分别使用复制和交换以及定义复制/移动分配运算符 看到答案后,我仍然有问题。复制和交换是否使用效率交换方便,并单独定义复制/移动分配运算符以使用方便交换效率 复制和交换将导致性能浪费 [需要引用] 你不会猜测性能问题:你测试它们,你测量它们。在你完成这些工作之后,你知道你有一个性能问题,你可以问自己如何改进 何时应分别使用复制和交换以及定义复制/移动分配运算符 这应该

我知道使用复制和交换来定义赋值运算符可以确保异常安全性并避免自赋值。 但是,当使用大量移动指定时,复制和交换将导致性能浪费: 何时应分别使用复制和交换以及定义复制/移动分配运算符

看到答案后,我仍然有问题。复制和交换是否使用效率交换方便,并单独定义复制/移动分配运算符以使用方便交换效率

复制和交换将导致性能浪费

[需要引用]

你不会猜测性能问题:你测试它们,你测量它们。在你完成这些工作之后,你知道你有一个性能问题,你可以问自己如何改进

何时应分别使用复制和交换以及定义复制/移动分配运算符


这应该是您的默认选择。如果有一天您确实存在性能问题,请分析您的代码并从中查看。

公认答案的最后一段已经回答了您的特定问题:度量。这样的一般问题虽然有趣,但会吸引基于意见的答案。如果您在评测时注意到一些关于性能的具体问题,那么您需要在问题中添加这些细节。但我认为这两种定义赋值运算符的方法是在性能和方便性之间进行选择。这种方法通常是正确的,但并非在所有情况下都是如此。如果你正在写一个图书馆呢?你几乎不可能把它的所有可能用途都用在板凳上。那么,一些直觉可能是有用的。例如,如果复制到的向量的容量大于或等于复制自向量的大小,那么对
std::vector
的复制和交换将是低效的。@DanielLangr我希望编写通用库的人能够洞察实际的问题案例,并对其进行基准测试。编译器一天比一天好,每天我都看到有经验的开发人员试图用复杂的设计胜过他们。当这些复杂的设计与更简单的设计进行比较时,简单的设计获胜的情况并不罕见。复制和交换为了方便而交易效率,而定义复制/移动分配操作符是为了方便而交易效率。是这样吗?