通过类型别名来间接定义引用的引用是合法的 是为什么?

szn_409 2016-04-24 01:33:35

//通过类型别名来间接定义引用的引用是合法的
int value = 10;
int &valueCopy = value;
IntCopy (&ValueCopy_Copy) = valueCopy;
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-04-25
  • 打赏
  • 举报
回复
int x; int & & y=x; 代码中 定义 双重引用 报错 原因是不是模板中的typedef 的模板参数类型 error: cannot declare reference to 'int&', which is not a typedef or a template type argument| 如下代码没有任何问题:
template <typename T>struct refs{
        typedef T & ref;
        typedef ref &refref;
    };


    typedef refs<int> ref;
    int x=0;
    ref::ref r =x;
    ref::refref rr=r;
    refs<int> ::ref ir=rr;
    refs<int>::refref irr =ir;
     ref::refref &rrr =x;/// 也没有任何问题
    /// 注意,这里并没有定义 引用的引用 这种类型,
    /// 而是对引用进行了叠缩(这个词有很多译法折叠,退化...)。
    ///  实际上还是只有 int & 这一种引用类型。
   PS:
    /// 右值引用 也会参与叠缩,只要含有 &最终 就是 左值引用,只有 && 就依然是 右值引用
   /// 右值引用 和左值引用 一起叠缩会变成左值引用
lm_whales 2016-04-25
  • 打赏
  • 举报
回复
模板里面可以,代码中似乎不可以(没深入了解) 模板中会执行引用叠缩 也就是两个引用变成一个引用 int & & x; ===>int &x; typedef 以后, 不必额外加括号,除非是type (&a)[N];这一类的 PS: 数组可以有引用,不可以定义引用的数组 指针可以有引用,不可以定义引用的指针
szn_409 2016-04-24
  • 打赏
  • 举报
回复
引用 2 楼 iyomumx 的回复:
为了照顾模板
能详解下么
iyomumx 2016-04-24
  • 打赏
  • 举报
回复
为了照顾模板
szn_409 2016-04-24
  • 打赏
  • 举报
回复

typedef int& IntCopy; //类型别名定义在这里

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧