简体   繁体   中英

Templates Default Arguments not working in C++

#include <iostream>

template<typename T = char>
T cast(T in){
 return in; 
}

int main(){
 std::cout << cast<>(5) << std::endl;
 return 0;
}

Above will print 5 instead of an empty character, as the function is supposed to return a character by default and not an int. What am I ding wrong?

Edit: Forcing it with std::cout << cast<char>(5) << std::endl;shows an empty character.

The declaration of 5 is an integer by default. This causes 'T' to be overridden with the type int, rather than using your default type. If you really wanted the char of value 5 (which you probably don't), you could specify it as '\\x5' .

For the ascii character 5....

int main(){
 std::cout << cast('5') << std::endl;
 return 0;
}

Default types in templates tend to be useful when it's not easy to determine the template type, eg cast from int

template<typename T = char>
T cast(int v){
 return T(v); 
}

and now this will default to a method that casts an int to a char (rather than a int to int).

 std::cout << cast(53) << std::endl;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM