CPP*_*PPL 4 c++ templates pointers constants
给定
int i = 42;
int* p = &i;
Run Code Online (Sandbox Code Playgroud)
我们做不到
const int * & d = p;
Run Code Online (Sandbox Code Playgroud)
在我目前的理解中,这是因为const int * & d可以读作“d是一个指向 an 的指针的引用int,它是一个const”,并且p是“指向 an 的指针int”,这意味着 RHS 需要变成一个临时的“指向 an 的指针”。 anint是一个const" 并且不能直接与引用绑定(如在 LHS 上)。我们需要有,比如说,const int* const& d = p;。可能的参考文献:1、2。
也就是说,请考虑以下玩具代码:
template<typename T>
class X
{
public:
void fun(const T& d) { }
};
Run Code Online (Sandbox Code Playgroud)
起初我想如果我这样做
X<int*> x;
x.fun(p);
Run Code Online (Sandbox Code Playgroud)
编译器生成的方法是void fun(const int*& d),由于上述原因,我会得到一个错误。
但是,没有错误,并且它“按预期”工作(我的意思是,我们总是拥有d自己,因为const无论T被指针类型或非指针类型替换)。
我目前的猜测是,对于上述场景,编译器生成的方法类似于void fun(int* const& d).
请问我的猜测是否正确?模板如何工作以使编译器生成的类“按预期”使用指针?
你的猜测是正确的。
对于const T,直接const根据类型进行限定。T给定Tis int*(non-const指向 non- 的指针const int),const T结果是const指针,即int* const(const指向 non- 的指针const int) 但不是const int*(non-const指向const int) 的指针。