问题
单项选择题
关于在调用模板函数时模板实参的使用,下列叙述中正确的是
A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略
答案
参考答案:A
解析: 在调用模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型。可以从两个不同的渠道获得类型信息:从“模板实参表”(在“<”和“>”之间)或从模板“函数实参表”(在“(”和“)”之间),“模板实参表”的信息优先于“函数实参表”的信息。如果从后者得到的信息已经能够判断其中部分或全部虚拟类型参数所对应的实际类型,而且它们又正好是“模板形参表声明”中最后的若干参数,则在“模板实参表”中可以省略这几个参数。如果所有的模板实参都被省略了,则空表“<>”也可以省略。
但在以下情况中,模板实参是不能省略的:
①从模板“函数实参表”中获得的信息有矛盾。
②虚拟类型参数用作函数的返回值类型,而且函数需要返回特定类型的值,而不管函数实参的类型是什么。在这种情况下,需要用模板实参强制虚拟类型参数对应于特定类型。
③虚拟类型参数没有出现在模板的“函数实参表”中。
④函数模板含有常规形参。