Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;?(不是右值引用)_C++_Reference - Fatal编程技术网

C++ 在C++;?(不是右值引用)

C++ 在C++;?(不是右值引用),c++,reference,C++,Reference,如果我有 typedef int& intr; typedef intr& intrr; 我可以申报 int x = 7; intrr y = x; 但是什么是引用引用?intrr和intr在语义上有什么不同吗?没有对引用的引用。C++标准明确地表示: §8.3.3/5 不得提及参考文献 在typedef和templates中,有一条规则通常被称为“引用折叠”。同一节第6段对此进行了描述: 如果类型定义(7.1.3)、类型模板参数(14.3.1)或 decltype说明符(7

如果我有

typedef int& intr;
typedef intr& intrr;
我可以申报

int x = 7;
intrr y = x;

但是什么是引用引用?intrr和intr在语义上有什么不同吗?

没有对引用的引用。C++标准明确地表示: §8.3.3/5

不得提及参考文献

在typedef和templates中,有一条规则通常被称为“引用折叠”。同一节第6段对此进行了描述:

如果类型定义(7.1.3)、类型模板参数(14.3.1)或 decltype说明符(7.1.6.2)表示类型
TR
,它是对类型
T
的引用,试图创建类型“cv的左值引用”
TR
”创建类型“对
T
的左值引用”,同时尝试 创建类型“对cv的右值引用
TR
”创建类型
TR

[示例:

-[结束示例]

示例中的
intr
intrr
是完全相同的类型,即
int&

#include <iostream>
#include <type_traits>

int main()
{
    typedef int& intr;
    typedef intr& intrr;
    int x = 7;
    intrr y = x;
    std::cout << std::is_same<intr, intrr>::value;
    std::cout << std::is_same<int&, intrr>::value;
    std::cout << std::is_same<int&, intr>::value;
}
#包括
#包括
int main()
{
typedef int&intr;
类型定义intr&intrr;
int x=7;
intrry=x;

std::cout-hmm,另一个相关问题:
#include <iostream>
#include <type_traits>

int main()
{
    typedef int& intr;
    typedef intr& intrr;
    int x = 7;
    intrr y = x;
    std::cout << std::is_same<intr, intrr>::value;
    std::cout << std::is_same<int&, intrr>::value;
    std::cout << std::is_same<int&, intr>::value;
}