是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?

时间:2019-08-05 12:41:44

标签: c++ pointers reference type-alias

我在这里有一个简单的示例:我使用using关键字作为引用类型使用类型别名,然后我想知道是否可以使用带有指针运算符(*)的类型别名来声明对指针的引用:

int main(){

    using ref_int = int&;

    int x = 10;
    int* p = &x;

    //int*(&rpx) = p;
    //ref_int * rptrx = p; // pointer to reference is not allowed.
    *ref_int(rptrx) = p; // rptrx is undefined

}
  • 出于好奇,当我使用std::vector<int>::reference的Element-type时,我想将其与指针运算符*结合使用以声明对指针的引用:

    int* ptr = new int(1000);
    std::vector<int>::*(reference rptr) = ptr; // error: expected expression
    
  • 但是我可以结合使用指针类型别名和引用运算符“&”来声明它:

    using pInt = int*;
    
    int i = 57;
    int* ptrI = &i;
    pInt(&rpInt) = ptrI;
    
    cout << *rpInt << endl;
    

**我知道我没有指向引用的指针,因为引用只是一个现有对象的别名,而指针是一个对象,因此我们可以有一个指向它的指针或引用。

1 个答案:

答案 0 :(得分:14)

您不能拥有C ++中引用的指针。在C ++中,引用只是它们所引用对象的别名,该标准甚至不要求它们占用任何存储空间。尝试使用引用别名对指针进行引用将不起作用,因为使用别名只会给您指向引用类型的指针。

因此,如果您想要指向引用所指事物的指针,则只需使用

auto * ptr = &reference_to_thing;

如果要引用语法为

的指针
int foo = 42;
int* ptr = &foo;
int*& ptr_ref = ptr;