c++ - Template argument deduction of string literal -
consider simple function
template<typename t> void func(const t& x) {std::cout<< typeid(t).name();}
now if call function func("ddd")
, t deduces to? . if there no const
in func
's parameter , t
char [4]
, whats confusing me addition of const
, t deduces ?
is : const char [4]
. if change parameter t const &x
(i.e change order of const
) deduction produces t
char const [4]
?
can explain argument deduction string literals?
string literals arrays of const characters.
a reference string literal of 4 chars of type char const (&)[4]
.
const char [4]
, char const [4]
same types!
char const (&)[n]
, const char [n]
, char const [n]
deduce char const [n]
#include <iostream> template<typename t> void func1(t& x) {std::cout<< typeid(t).name()<<std::endl;} template<typename t> void func2(const t& x) {std::cout<< typeid(t).name()<<std::endl;} template<typename t> void func3(t const &x) {std::cout<< typeid(t).name()<<std::endl;} int main() { char c[4]= {'a','b','c','d'}; const char c1[4]= {'a','b','c','d'}; char const c2[4]= {'a','b','c','d'}; func1("abcd"); //prints char const [4] func1(c); //prints char [4] func1(c1); //prints char const [4] func1(c2); //prints char const [4] func2("abcd"); //prints char const [4] func2(c); //prints char [4] func2(c1); //prints char const [4] func2(c2); //prints char const [4] func3("abcd"); //prints char const [4] func3(c); //prints char [4] func3(c1); //prints char const [4] func3(c2); //prints char const [4] return 0; }
Comments
Post a Comment