c++类型形参的实参的受限转换
2013-09-25 20:52
183 查看
缘起:《c++ primer》 4th, 528页,习题16.3
源程序
错误提示
函数模板中定义的类型S,在函数的两个参数中,类型必须相同,但是编译错误,提示:一个类型为char[3],另一个类型为char[6].这就引出一条实参的受限转换。
数组或函数到指针的转换:如果模板形参不是引用类型,则对数组或函数类型的实参应该用常规指针转换。数组实参将当做指向第一个元素的指针,函数实参当做指向函数类型的指针。
下边程序就可以了
注意直接传字串默认是const类型, 比如
错误提示:
改成正确的:
源程序
#include <iostream> #include <vector> #include <list> using namespace std; template<class S> int compare(const S &v1, const S &v2) { if (v1 < v2) return -1; else if(v1 > v2) return 1; else return 0; } int main() { string s1 = "hi"; string s2 = "world"; cout << "string:" << compare(s1, s2) << endl; cout << "hi:" << compare("hi", "world") << endl; }
错误提示
函数模板中定义的类型S,在函数的两个参数中,类型必须相同,但是编译错误,提示:一个类型为char[3],另一个类型为char[6].这就引出一条实参的受限转换。
数组或函数到指针的转换:如果模板形参不是引用类型,则对数组或函数类型的实参应该用常规指针转换。数组实参将当做指向第一个元素的指针,函数实参当做指向函数类型的指针。
下边程序就可以了
#include <iostream> #include <vector> using namespace std; template<class S> int compare(const S v1, const S v2) { if (v1 < v2) return -1; else if(v1 > v2) return 1; else return 0; } int main() { char a[] = "abcd"; char b[] = "12345"; cout << compare(a, b) << endl; }
注意直接传字串默认是const类型, 比如
#include <iostream> #include <vector> using namespace std; template<class S> int compare(const S v1, const S v2) { if (v1 < v2) return -1; else if(v1 > v2) return 1; else return 0; } int main() { char a[] = "abcd"; char b[] = "12345"; cout << compare(a, "1234") << endl; }
错误提示:
改成正确的:
#include <iostream> #include <vector> using namespace std; template<class S> int compare(const S v1, const S v2) { if (v1 < v2) return -1; else if(v1 > v2) return 1; else return 0; } int main() { const char a[] = "abcd"; char b[] = "12345"; cout << compare(a, "1234") << endl; }
相关文章推荐
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
- C++语法基础--模板实参推断,模板类型形参的实参的受限转换,模板实参推断与函数指针
- C/C++中 实参和形参
- 老生常谈C++中实参形参的传递问题
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- 基础概念 :形参/实参,值类型/引用类型,值传递/引用传递,==/equals
- C++形参与实参的区别实例解析
- const char*类型的实参与LPCTSTR类型的形参不兼容 MFC
- C++ 函数使用形参传入二维数组实参的方法
- c++--实参和形参
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容 (vs2012)
- C语言学习笔记 (003) - C/C++中的实参和形参(转)
- 【C++再学习】【03】函数形参实参与值传递引用传递新解
- 非类型形参的模板实参
- 函数调用时,需注意实参和形参的类型差异,类型内存存储格式的差异
- C语言基础 实参与形参的类型一致
- C++ 引用类型const形参的用法
- const.char类型形参与LPWSTR类型的实参不兼容