引用折叠

原创 2016年05月31日 16:15:09

一 引用折叠规则

    1、T& + & = T&

    2、T& + && = T&

    3、T&& + & = T&

    4、T或T&& + && = T&&

二 例子如下

#include "stdafx.h"
#include <iostream>
#include <typeinfo.h>
using namespace std;

typedef int &  lRef;
typedef int && rRef;

typedef const int &  lcRef;
typedef const int && rcRef;

void main()
{
	int a = 10;
	
	// 左值引用
	lRef  b  = a;  // b : int & 
	lRef  &c = a;  // c : int &, & and & = &

	// 右值引用
	rRef d = 10;   // d : int&&     
	rRef&& e = 10; // e : int&&, && and && = &&
	lRef&& f = a;  // f : int&,  &  and && = &
	rRef& g = a;   // g : int&,  && and  & = &

	//int a = 10;

	//// 左值引用
	//lcRef  b = a;   // b : const int & 
	//lcRef  &c = a;  // c : const int &, const & and & = const &

	//// 右值引用
	//rcRef d = 10;   // d : const int&&     
	//rcRef&& e = 10; // e : const int&&, const && and && = &&
	//lcRef&& f = a;  // f : const int&,  const &  and && = &
	//rcRef& g = a;   // g : const int&,  const && and  & = &
}

三 模板函数参数

#include "stdafx.h"
#include <iostream>
#include <typeinfo.h>
using namespace std;

template<typename T>
void FunTemple(T && param)
{

}

void main()
{
	// inParam : int         T : int&        param : int&
	// inParam : int&        T : int&        param : int& 
	// inParam : int&&(无名) T : int         param : int&&
	// inParam : int&&(有名) T : int&        param : int&
	// inParam : const int   T : const int&  param : const int&
	// inParam : const int&  T : const int&  param : const int&
	// inParam : const int&& T : const int&  param : const int&
	
	int inParam = 10;
	FunTemple(inParam);
}




C++:模板实参推断及引用折叠

1.模板实参推断的概念对于函数模板和类模板,编译器利用调用中的实参函数来确定其模板参数。 从函数实参来确定模板实参的过程,称为模板实参推断。 模板实参的推断和常规的函数实参推断的规则不一样,尤其...
  • sixdaycoder
  • sixdaycoder
  • 2015年06月14日 11:00
  • 1883

引用折叠和完美转发

如下来分析使用右值引用 + 新增的引用折叠推导规则,如何来达成完美转发 进行转发的函数模板定义如下 其中 WrapFunc 函数模板将参数转发给 InnerFunc 函数 templat...
  • l451800869
  • l451800869
  • 2016年03月10日 14:12
  • 1830

C++11 reference collapsing and perfect forward (引用折叠以及完美转发)

引用折叠原则和完美转发是有联系的,可以说后者是基于前者的某些特性实现的,具体来看一下。 要理解完美转发,需要了解两个知识点: 1. 引用折叠原则(Reference collapsing rule...
  • beyongwang
  • beyongwang
  • 2017年01月04日 22:54
  • 457

Effective Modern C++ 条款28 理解引用折叠

Effective Modern C++ 条款28
  • big_yellow_duck
  • big_yellow_duck
  • 2016年09月04日 19:34
  • 2065

【Unity编程小技巧】折叠大量代码

在Unity,编程中,会有大量的代码出现, 一行一行的看,就会很麻烦, 那么怎样把一块代码折叠起来,就要使用#region方法 region使用方法如下所示 #region UnitySk...
  • BuladeMian
  • BuladeMian
  • 2017年01月05日 16:33
  • 906

C++引用折叠

C++引用折叠
  • zhangxiao93
  • zhangxiao93
  • 2017年07月11日 15:09
  • 200

引用折叠和右值引用参数

通常我们不能将一个右值引用绑定到一个左值上。但是,C++语言在正常的绑定规则之外定义了两个例外规则: 第一个例外规则影响右值引用参数的推断如何进行。当我们将一个左值传递给函数的右值引用参数,且此右值...
  • tengyft
  • tengyft
  • 2015年04月28日 11:19
  • 715

Accordion:可折叠面板的集合

Accordion:可折叠面板的集合 Accordion控件中可以包含若干个面板,让用户通过点击不同面板的标题栏一次只展开并显示其中的一个内容,就像将好多个CollapsiblePanel堆到了一起。...
  • wjsun
  • wjsun
  • 2010年05月11日 13:42
  • 2840

C++11 引用叠加规则和模板参数类型推导规则

C++11 引用叠加规则和模板参数类型推导规则
  • ggz631047367
  • ggz631047367
  • 2015年09月05日 11:04
  • 959

C++引用折叠 —— 摘自维基百科

引用折叠规则 对于C++语言,不可以在源程序中直接对引用类型再施加引用。T& &将编译报错。C++11标准中仍然禁止上述显式对引用类型再施加引用,但如果在上下文环境中(包括模板实例化、typedef、...
  • jgt_insect
  • jgt_insect
  • 2016年08月08日 09:13
  • 142
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用折叠
举报原因:
原因补充:

(最多只允许输入30个字)