Atış yapmayan takas deyimini uygularken, throw()
kullanmalı mıyım? Özellikle Atışlı olmayan takas uygularken throw() kullanmalı mıyım?
namespace A
{
struct B
{
void swap(B& other) throw()
{ /* fancy stuff that doesn't throw */ }
};
void swap(B& lhs, B& rhs) throw()
{ lhs.swap(rhs); }
}
namespace std
{
template<>
void swap(A::B& lhs, A::B& rhs) throw()
{ lhs.swap(rhs); }
}
I
std::swap
ait uzmanlık
throw()
özellikleri koyarak endişe.
Bonus soru:
C++ 0x's noexcept
anahtar sözcüğünü kullanırken farklı mıdır?
Bu üç takas bildirimini bire kadar basitleştirebilirsiniz: struct B {friend void swap (B & a, B & b) {/ * ...* /}}; 'sonra basitçe kullanıcıların swap'i kullanarak std :: swap'i kullanmasını; swap (a, b); 'swap'ınızı ADL ile çeker (veya bunu zaten yapan boost :: swap'i kullanabilirler). Özellikle, takasınız için bir tane kullanmaya karar verirseniz, bu durum std :: swap üzerinde bir istisna belirtimine ilişkin endişeyi ortadan kaldırır. –