14 Haziran 2017 Çarşamba

Direct Initialization

Giriş
Foo foo(...) şeklindeki kullanımdır. Ancak bu kullanımda

1. ya girdi direkt kullanılır
2. ya da girdinin önce bir başka tipe çevrilmesi gerekiyorsa çevirilir ve daha sonra  benim constructor metoduma parametre olarak verilir.

Örnek
Elimizde şöyle bir kod olsun.
template <typename Type>
struct Class
{
  Type data;
  Class(Type data) : data(data) { }
};
Şöyle yaparız. Burada const char*, önce std::string'e çevriliyor. Daha sonra benim constructor'ıma parametre olarak veriliyor.
Class<std::string> b("abc");
Örnek
Elimizde şöyle bir sınıf olsun.
class Foo
{
  int value;
  string str_value;

public:

  Foo(int param) { value = param; }

  Foo(string param)
  {
    str_value = param;
  }
};
Direct Initialization için şöyle yaparız.
Foo foo1 (2);
Foo foo2 ("4");
Açıklaması şöyle.
For copy initialisation the compiler searches for a (single) user defined conversion from (in case of d) char const * (this is a bit inaccurate, see end of answer) to CLS, whereas for direct initialisation all constructors are tried, where CLS(std::string) can be used​ because there's a conversion std::string(char const *) available.



Hiç yorum yok:

Yorum Gönder