美文网首页C/C++学习笔记
C++引用为什么不能绑定到临时数据

C++引用为什么不能绑定到临时数据

作者: 零岁的我 | 来源:发表于2020-01-02 19:53 被阅读0次

说到临时变量,我们大家也许都挺熟悉, 但是我自己对临时变量的理解却一直存在一个误区。通常情况下,我会把为了做某一件事情而临时创建的一个变量叫做临时变量。比如说在交换两个变量的值时,通常我们会创建第三个变量来达到我们最终的目的,而我们称之为“临时变量”。然而,大师Scott Meyers告诉我们,事实不是这么简单!

在C/C++中,真正意义上的临时变量是看不见的,就是说它们不会出现在你的代码中,参考一下这句话(来自《More Effective C++》):

True temporary objects in C++ are invisible — they don't appear in your source code. They arise whenever a non-heap object is created but not named.

按照这种定义,我以前所理解的“临时变量”其实并不是真正意义上的临时变量,他只是我所定义的一个短命的局部变量而已。

临时变量通常在函数参数传递发生类型转换以及函数返回值时被创建。比如下面这个例子:

void uppercasify(const string& str)
{
}

int main(int argc, char* argv[])
{
   char subtleBookPlug[] = "Effective C++";

   uppercasify(subtleBookPlug);  // 此处有类型转换

   return 1;
}

函数uppercasify需要const string&类型的参数,而实参类型为char *,故编译器会尝试着进行类型转换。此时一个string类型的临时变量将被创建,并用subtleBookPlug来初始化对象,最后将临时变量传给函数uppercasify。
理解了这个例子,也就能较好的理解为什么C/C++不允许为非const的引用类型创建临时变量了。比如下面这个例子:

void uppercasify(string& str)  // 参数类型改为string &
{
}

int main(int argc, char* argv[])
{
   char subtleBookPlug[] = "Effective C++";

   uppercasify(subtleBookPlug);

   return 1;
}

此时,如果创建了一个临时变量,那函数所修改的对象为临时变量,而不是用户所期待的subtleBookPlug了,从而容易引起误操作。
————————————————
转载文章
原文链接:https://blog.csdn.net/joey_zengchen/article/details/1566713

相关文章

  • C++引用为什么不能绑定到临时数据

    说到临时变量,我们大家也许都挺熟悉, 但是我自己对临时变量的理解却一直存在一个误区。通常情况下,我会把为了做某一件...

  • [C++之旅] 4 C++的引用

    [C++之旅] 4 C++的引用 基本数据的引用 apple_a为apples的引用,修改apple_a等同于修改...

  • C++中的引用

    C++中的引用定义是 引用相当于别名(alias) 它不是一种数据类型,不可以定义引用的指针。也不能定义数组的引用...

  • 复杂数据类型

    指针 1.指针是对象, 是固定大小, 通过&获取所指对象; 引用 1.引用是别名, 不能单独存在, 定义时必须绑定...

  • C++特性之引用 (Boolan)

    C++特性之引用 (Boolan) 本章内容:1 引用的不同用例1.1 引用变量1.2 引用数据成员1.3 引用参...

  • C/C++基础(5)

    C++ namespace 引用 引用的本质是变量的别名int a = 10;int &b = a;"数据类型 &...

  • C++队列缓存的实现

    C++队列缓存的实现 为什么使用队列缓存 c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的...

  • 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1、一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一...

  • vue2创建组件与组件的使用

    1.引用vue2 2.创建组件容器 v-bind 绑定数据 3.使用组件,并通过绑定数据进行传值 ...

  • C++远征之离港篇

    C++语言引用 #######基本数据类型引用 类型:&b = a (即:a的别名是b;b的地址指向a) ####...

网友评论

    本文标题:C++引用为什么不能绑定到临时数据

    本文链接:https://www.haomeiwen.com/subject/sgpooctx.html