Giriş
Belirtilen tipin std::memcpy ile kullanılıp kullanılamayacağını belirtir. Açıklaması şöyle
Şöyle yaparız
Belirtilen tipin std::memcpy ile kullanılıp kullanılamayacağını belirtir. Açıklaması şöyle
std::is_trivially_copyable, which allows use of memcpy for both making a new object and modifying an existing one.
Bir başka açıklama şöyle
std::is_trivially_copyable answers if you copied this instance with a bytewise copy, would the result be the same as copying using a copy operator?
Açıklaması şöyle.
A trivially copyable class is a class thatÖrnek
Has no non-trivial copy constructors (this also requires no virtual functions or virtual bases)
Has no non-trivial move constructors
Has no non-trivial copy assignment operators
Has no non-trivial move assignment operators
Has a trivial destructor
Şöyle yaparız
#include <iostream>
#include <type_traits>
#include <tuple>
std::cout << std::is_trivially_copyable<std::tuple<int>>::value << std::endl;
std::cout << std::is_trivially_copyable<std::pair<int, int>>::value << std::endl;
std::cout << std::is_trivial<std::tuple<int>>::value << std::endl;
std::cout << std::is_trivial<std::pair<int, int>>::value << std::endl;
Çıktı olarak şunu alırız. Çünkü std::tuple ve std::pair'in içinde muhtemelen buffer için bellek var ve byte byte kopyalarsak doğrı çalışmaz0
0
0
0
Örnek
Şöyle yaparız. Burada çıktı true, çünkü A nesnesi byte byte kopyalansa bile aynı nesneyi elde ederiz.
class A
{
A() = default;
A(const A&) = default;
A(A&&) = default;
A& operator=(const A&) = default;
A& operator=(A&&) = default;
~A() = default;
int a;
};
int main()
{
std::cout << std::boolalpha <<
...
std::is_trivially_copyable_v<A> << "\n";
return 0;
}
std::is_trivially_copyable_v metodu
Kodu şöyledir
template< class T >
inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
Hiç yorum yok:
Yorum Gönder