c++产生非常量引用的初始值必须是左值

出现这种情况是因为调用函数的形参类型是  T&(T为某一类型),该类型与调用参数值传入不一致,比如函数中形参是int型,而传入实参是double,存在隐式类型转化,系统会自动产生临时变量temp将常量进行了修改。

解决的办法,1避免隐式调用,如:int y=5;double x=(double)y,然后再将x值传入函数

2.在形参面前加const,避免了修改形参。

原文地址:https://www.cnblogs.com/sozze011/p/11257281.html

时间: 2024-11-08 23:10:46

c++产生非常量引用的初始值必须是左值的相关文章

[转载]非常量引用的初始值必须为左值的问题

首先,先看下面一个例子: eg.1 #include<</span>iostream> usingnamespace std; int main(){ int i =2; double &r =i; return 0; } gcc error: invalid initialization of reference of type 'double&' from expression of type 'int' 如果改成 const double &r =i;

【转】int &amp;&amp; 非常量右值

C++ 11中引入的右值引用正好可用于标识一个非常量右值.C++ 11中用&表示左值引用,用&&表示右值引用,如: int &&a = 10 右值引用根据其修饰符的不同,也可以分为非常量右值引用和常量右值引用. C++ 11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习“移动语义”(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值.左值和右值都是针对

对const的引用(常量引用)

引用的类型必须与其所引用对象的类型一致.但是,对const的引用是第一种例外情况. 对const的引用,常简称为"常量引用". 常量引用的初始值可以是任意表达式,只要该表达式的结果能转换成引用的类型即可. 但是,对于字面值,一般表达式以及与常量引用类型不一致的对象作为常量引用的初始值,常量引用实际绑定到了临时变量上.测试代码如下: 1 #include <iostream> 2 3 int main() 4 { 5 int i = 42; 6 int &r1 = i

认识左值与常引用

代码编译运行环境:VS2012+Win32+Debug 1.左值的定义 左值是(lvalue)是C++中的一个基本概念.凡是可以出现在赋值运算符左边的表达式都是左值.与左值相对的就是右值(rvalue),凡是可以出现在赋值运算右边的表达式都是右值.左值一定可以作为右值,但反过来不一定成立. 可以给左值下一个定义:值为可寻址的非只读单元的表达式称为左值. 因此,理解左值的概念,需要注意一下几点: (1)左值一定是可以寻址的表达式,不能寻址的表达式不能作为左值.例如,表达式3+5是一个符号常量表达式

C++ 11中的左值引用和右值引用

1.首先区分左值和右值    左值是表达式结束后依然存在的持久对象    右值是表达式结束时就不再存在的临时对象    便捷方法:对表达式取地址,如果能,则为左值,否则为右值举例:    int a = 10    int b = 20    int *pFlag = &a    vector<int> vctTemp    vctTemp.push_back(1)    string str1 = "hello"    string str2 = "wo

[转]C++11 左值、右值、右值引用详解

https://blog.csdn.net/hyman_yx/article/details/52044632 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值.在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没有名字的就是右值(将亡值或纯右值).举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址:表达式b+c.函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名

const常量引用的使用方法

C++编程语言中,对于常量的引用是一个非常重要的应用技巧.在这篇文章中,我们将会为大家详细介绍一下有关C++常量引用的相关应用方法,相信大家可以从中学到很多知识. C++单例模式基础内容详解 C++创建Web服务相关方法剖析 C++构造函数如何进行初始化 C++标识符命名规则相关应用技巧分享 C++函数模板基本概念讲述 如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.对C++常量引用可以用其它任何引用来初始化:但不能改

C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward

这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理解C++ 11中这些比较重要的特性. 关于左值和右值的定义 左值和右值在C中就存在,不过存在感不高,在C++尤其是C++11中这两个概念比较重要,左值就是有名字的变量(对象),可以被赋值,可以在多条语句中使用,而右值呢,就是临时变量(对象),没有名字,只能在一条语句中出现,不能被赋值. 在 C++1

C++引用(左值引用)

1. 相关概念 C++引用分两种:lvalue reference(左值引用)和rvalue reference(右值引用).本文讨论的是lvalue reference(左值引用). 1.1 lvalue(左值)和rvalue(右值) 在讨论C++引用之前,我们需要先搞清楚两个概念:lvalue(左值)和rvalue(右值). lvalue(左值)和rvalue(右值)是对每个C++表达式值类别的区分. 一个表达式的值类别是左值,那么这个表达式有两点性质:1)可以放在赋值运算符'='的左边:2