博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
invalid initialization of non-const reference of type ‘int*&’ from a temporary of type ‘int*’...
阅读量:6482 次
发布时间:2019-06-23

本文共 1494 字,大约阅读时间需要 4 分钟。

被问及以下问题:

#include<iostream> 
using 
namespace std; 
void func(
int * &a, 
int b) 
    
for(
int i=
0;i<b;i++) 
        a[i]+=i; 
int main() 
    
int test[
10]={
1,
2,
3,
4,
5,
6,
7,
8,
9,
7}; 
    func(test,
4); 
    cout<<
"
After assignment, test is 
"<<endl; 
        ...

error: invalid initialization of non-const reference of type ‘int*&’ from a temporary of type ‘int*’

we both know: 

int  func(int *a, int b); 可以正确运行。 

 理解其初始意图,想对 int指针 当一个引用 处理。

 

 

  实际上,指针与引用没有多少差别。只是调用的时候,指针需要在调用的时候,临时转换一个指针。(we heard that) 。而引用则省去了这个步骤。

  上面代码的调用处, 可以相当于以下:

int
 main(
void
) 

{

    int y=3;
    int &x = y;
    
    int* address_y=&y;
    int* &ref_y = address_y;
    
    int array[3] ={
1,2,3};
        
    int* address_array= array;
    int* &ref_address_array = address_array;
    //int* &ref = array;//error , the same effect as func(test,4);

} 

 

  error: invalid initialization of non-const reference of type ‘int*&’ from a temporary of type ‘int*’
  这个重点似乎在于 temporary 。
  而 "
临时变量作为非const的引用参数传递" ,编译器不允许的。(ref 2 this)   

 

  但如果修改以下这个转换,则可以进行编译通过并运行。
int main() 
    
int test[
10]={
1,
2,
3,
4,
5,
6,
7,
8,
9,
10}; 
    
    
int *temp = test;
/*
**** 加一变量转换 ******
*/
    func(temp,
4); 
/*
**** 用变量转换 ******
*/    
    cout<<
"
After assignment, test is 
"<<endl; 
    
for(
int i =
0;i<
10;i++) 
        printf(
"
%d\t
",test[i]);pasting
    printf(
"
\n
");
两者区别,我没看出来。test, temp 都是 lvalue 。似乎加一变量 没有了“
临时 ”的效果。

 

 ======

后续:找到原因:

quote:"是因为数组名是一个地址常量,非const引用不能引用一个常量。如果把void func(int *&a, int b)改成void func(int *const &a,int b)就可以编译通过。 "

同时解释了为何上述的 int *temp 为何可以,int * temp =test;//转换成 non-const reference , match with func( int * , int ) .

:-)

 

转载地址:http://prfuo.baihongyu.com/

你可能感兴趣的文章
Android_Drawable Bitmap Canvas Paint之间区别[转]
查看>>
正确认识和使用鲁班尺
查看>>
Linux学习之常用网络通信命令与shell简单应用技巧(四)
查看>>
阅读计数功能实现
查看>>
Python-递归实现
查看>>
webbench压力性能测试
查看>>
java StrutsTypeConverter的使用
查看>>
取出重复的客运车班次,两个字段的值互换视为重复值
查看>>
Android O编译前修改文件和目录权限
查看>>
n!素因子p的幂 swjtuOJ 2090【数论】
查看>>
UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-13串口功能调试
查看>>
设计模式状态
查看>>
day44-Celery异步分布式
查看>>
Android学习之Android studio TraceView和lint工具的使用具体解释
查看>>
python做var模型的滞后阶数怎么确定_请问关于VAR模型的滞后阶数怎么确定?
查看>>
java多线程理解_三个趣味故事,让你如何理解Java多线程!
查看>>
java 获取温度_Java利用RXTX串口通信工具类获取DS18B20温度传感器的温度值
查看>>
active控件和java脚本_【学习笔记】在原生javascript中使用ActiveX和插件
查看>>
android lua调用java_android lua 在java 中的应用实例
查看>>
java concurrency 线程_JAVA CONCURRENCY EXECUTORS 介绍Java并发处理线程池
查看>>