C++ about generic initialization in templates -



C++ about generic initialization in templates -

i writing generic function below.

template<class iterator, class t> void foo(iterator first, iterator last) { t a; cout << << endl; // iterators } typedef vector<double>::iterator dblptr; vector<double> values; foo< dblptr, int>();

this functions prints out undefined value variable a, while if alter initialization into

/// t = t() cout << << endl; // iterators

i can see initialized value 0 expecting.

if phone call t a variable initialized default value, if phone call t = t() believe due optimization re-create constructor should called value of t() still default one.

i cannot understand difference behind these 2 lines , reason why happens?

first of all, default initiaization of built-in types such int leaves them uninitialized. value initialization leaves them zero-initialized. example

this default initialization:

t a;

this value initialization, using copy initialization:

t = t();

you right copies can elided here, has effect of creating single value-initialized t object. however, require t copyable or move-copyable. case built-in types, restriction bear in mind.

the re-create initialization syntax required because function declaration:

t a();

but c++11 allows value-initialize this:

t a{};

c++ templates initialization generic-programming function-templates

Comments

Popular posts from this blog

php - Android app custom user registration and login with cookie using facebook sdk -

django - Access session in user model .save() -

php - .htaccess Multiple Rewrite Rules / Prioritizing -