c++ - 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
问题描述
我在这里有一个简单的例子:我使用类型别名 usingusing
关键字作为引用类型然后我想知道我是否可以使用该类型别名和指针运算符(*)来声明对指针的引用:
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
}
因为出于好奇,当我使用 Element-type 时,
std::vector<int>::reference
我想将它与指针运算符结合起来*
声明对指针的引用: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;
** 我知道我不能有指向引用的指针,因为引用只是已经存在的对象的别名,而指针是对象,因此我们可以拥有指针或对它的引用。
解决方案
您不能在 C++ 中拥有指向引用的指针。在 C++ 中,引用只是它们所引用事物的别名,标准甚至不要求它们占用任何存储空间。尝试使用引用别名来引用指针是行不通的,因为使用别名只会给你一个指向引用类型的指针。
所以,如果你想要一个指向引用所指事物的指针,你只需使用
auto * ptr = &reference_to_thing;
如果您想要引用该语法的指针
int foo = 42;
int* ptr = &foo;
int*& ptr_ref = ptr;
推荐阅读
- google-cloud-firestore - 火力基地 | 集合组查询的问题
- android - 安装android studio后找不到ANDROID SDK
- javascript - 如何通过在颤动中点击屏幕来关闭可滑动的
- python - 从python中的字符串汤中提取电子邮件
- python - 'float' 类型的 Python Selenium send_key 对象没有 len()
- selenium - 使用 selenium java 验证 Web 中的图像/徽标存在失败
- amazon-web-services - 如何使用 AWS Amplify @auth 标签限制使用另一个对象的所有者字段在 GraphQL 对象上创建?
- vue.js - NuxtJS 可以生成纯 HTML 吗?
- python - Linux EC2 机器上的 Python 作业,将文件放到 Google Drive 上
- unity3d - Unity游戏集成HMS Core SDK获取不到agconnect-services.json文件内容