考慮下面的類,具有移動構造函數和移動賦值操作符:C++爲什麼在Move構造函數和Move Assignment Operators的上下文中需要noexcept來啓用優化?
class my_class
{
protected:
double *my_data;
uint64_t my_data_length;
}
my_class(my_class&& other) noexcept : my_data_length{other.my_data_length}, my_data{other.my_data}
{
// Steal the data
other.my_data = nullptr;
other.my_data_length = 0;
}
const my_class& operator=(my_class&& other) noexcept
{
// Steal the data
std::swap(my_data_length, other.my_data_length);
std::swap(my_data, other.my_data);
return *this;
}
什麼是noexcept
這裏的目的是什麼?我知道這是命中,沒有例外應由下列函數拋出的編譯器,使用noexcept
不會使自身的編譯器優化but how does this enable compiler optimizations?
啊,所以對我來說永遠記得向移動構造函數或移動賦值運算符添加'noexcept'非常重要? – user3728501
是的,如果您的拷貝構造函數執行數據的深層副本並且您想在STL容器中使用您的類,則這很重要。 –