这是我的C++代码:
inline static void swap(std::string& a1, std::string& a2) {
std::string temp( std::move(a1));
a1 = std::move( a2 );
a2 = std::move( temp );
}
我运行了这个函数1000000次,平均需要78毫秒,但是标准库的那个只需要13毫秒。我刚刚查看了std::swap的实现,发现和我的一模一样,所以为什么我的代码这么慢?
std::cout << "Before swap: str1 = " << str1 << ", str2 = " << str2 << '\n'; str1.swap(str2); std::cout << "After swap: str1 = " << str1 << ", str2 = " << str2 << '\n';
}输出:Before swap: str1 = First string, str2 = Second string After swap: str1 = Second string, str2 = First string - M.Mstd::basic_string
的std::swap
特化可能只是执行a1.swap(a2);
。 - Richard Crittenstd::string::swap
很可能能够忽略区别,并交换原始字节,而不管它们的含义。当然,这只有在std
库实现可以对编译器进行假设时才可能发生。 - MSalters