常量引用 const T&

1.引用本身不是对象,只是引用对象的别名,没有内存空间产生

2.引用必须严格类型匹配

3.而常量引用 const T& 可以引用字面值常量及表达式 其实也就是右值,且常量引用的不同与T类型对象时,如果可以类型转换则会类型转换为T类型常量引用,不过会产生临时变量(C++ Primer):

code:

double d=25.0;

const int& a=d;

implicit code:

double d=25.0;

const int temp=d;

const int& a=temp;

所以常量引用时如果出现自动类型转换就要得注意临时变量作用域了,以下是衍生到模板显示调用时可能出现的问题

#include <iostream>
#include <string>

template <typename T>
inline const T&  max(const T& a,const T& b)
{
    return a>b? a:b;
}

int
main()
{
    //类型转换都会产生临时变量
    //const T& 类型不同需要转换时 引用的是临时变量
    //模板指定显示参数类型时注意如果类型不同引用的可能是临时变量
    double a=20.2,b=30.2;
    const double& c=max(a,b);
    std::cout<<c<<std::endl;
    b=200;
    std::cout<<c<<std::endl;

    a=20.2;
    b=30.2;
    const int& d=max<int>(a,b);
    std::cout<<d<<std::endl;
    b=200;
    std::cout<<d<<std::endl;

//    编译器:clang
//    out:

//    30.2
//    200
//    30
//    30

    return 0;
}

原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/9501260.html

时间: 2024-10-11 05:43:01

常量引用 const T&的相关文章

引用专题(续)=》 常量引用

常引用分两点: 1 使用变量初始化const引用 const int &a = b 2 使用字面量常量初始化const引用  const int &m = 10: #include <iostream> using namespace std; void main() {     //普通引用     int a = 10;     int &b = a;     printf("b"%d\n",b);               //常引

对const的引用(常量引用)

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

const常量引用的使用方法

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

【转】C++ 常量类型 const 详解

文章转自:http://www.cnblogs.com/daocaoren/archive/2011/07/14/2106278.html 1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点. 3.cons有什么主要的作用?(1)可以定义const常量,具有不可变性. 例如: const in

重载 与常量引用

void print(int a,int b,int =0){ cout<<"执行三个参数的"<<endl; } void print(int a,int b){ cout<<"执行两个参数的"<<endl; } //以上两个,在使用函数print(3,5);//error:ambiguous call to overloaded function void print(int a){//注意返回类型 cout<

位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位清0(与0位与)且同时保留其它位不变(与1位与):获取某变量中某一位(与其位与后判断是否为该数) 2.|  按位或(双目): 将某变量中的某些位置1(与1位或)且保留其它位不变 3.^  按位异或(双目): 将某变量中的某些位取反(与1异或)且保留其它位不变 异或运算特点: 如果 a^b=c,那么就有 c^b = a以及c^a=b.(穷举法可证---用于

C++ 常量引用与临时变量

由 <<C++ Primer>> 练习7.49 (b) 产生出来的小问题. 总结: 1.不要对临时变量进行改变.要传递临时变量,得用常量引用. 2. 当引用不需要更改时,用const引用. 问题: struct Sales_data { Sales_data() = default; Sales_data(std::string &str){} Sales_data& combine( Sales_data&); }; Sales_data& Sal

C++ 常量引用

普通引用为形参的函数,一般会更改实参的值:以常量以及常量引用为形参的函数,一般不对实参进行修改. 常量引用兼有常量和引用的优点.不会新创建一个变量然后进行拷贝,而是直接传对象,速度快,同时保证了在函数内部无法对对象进行修改. 通常,引用的类型必须和所引用的类型一致,但常量引用在类型不匹配时,编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.普通引用则没有这样的过程. 这个过程的一个作用是让不匹配的类型隐式转换成需要的常量类型.一个典型的例子如下:

在php中定义常量时,const与define的区别

[问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很多. (1).const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. (2).const可在类中使用,define不能. (3).const不能在条件语句中定义常量. 例如: if (...){ const FOO = 'BAR';  // 无效的