|
发表于 2023-5-28 14:53:21
|
显示全部楼层
对于第一个调用func(ps),由于ps是一个const string *类型,所以使用const T &t模板参数,T被推导为const string *类型,进而将func实例化为string * const &func(const string *&)。这里的引用是底层const的,因为我们传入的是一个指向常量字符串对象的地址,所以被绑定的类型是该指针的顶层const属性被忽略了。
对于第二个调用func(&s),由于s是一个string对象,取它的地址得到的是一个const string *类型的指针。同样使用const T &t模板参数,T被推导为const string *类型,进而将func实例化为const string *&func(const string *&)。在这种情况下,我们的指针是一个非常量指针,但是在传递给func时,它会被转化为指向常量对象的指针,即底层const。因此,推导出来的模板参数为const string *,而函数参数类型为const string *&,其中的引用是指向指针的引用,即指针本身是引用类型,而且是底层const引用。 |
|