c 引用和預設衝突

2021-08-20 19:51:51 字數 1313 閱讀 2638

工作中,經常要接觸別人的**。然後因為需求變更,要修改別人的**。

程式的函式為了獲取想要的變數,可能會產生一些臨時變數作為輔助。最近,因為業務的複雜化,在這個函式達到目的的同時,還想獲取臨時變數。這個時候,首先我想到的方法就是加乙個引用型引數,然後將臨時變數賦值給引用的變數。

例如:在該函式中想要獲取z的值,怎麼獲取?

void test(int x,int y)

{ int z = x+y;

cout《加乙個引用變數就好了

#include using namespace std;

void test(int x,int y,int &n)

{ int z = x+y;

n= z;

cout<<"x="《如果在原源**中,多次呼叫了test(int x,iny),現在加了乙個引數,豈不是要把所有呼叫函式的地方都加乙個引數?而且可能有的地方並不需要獲取z值。一般這種情況下,我們很容易想到預設函式。

void test(int x,int y,int n=0)

{ int z = x+y;

n= z;

cout<<"x="<

那是不是把預設和引用弄一起就能達到兩個目的?比如:

void test(int x,int y,int& n=0) //注意:這段**有問題

{ int z = x+y;

n= z;

cout<<"x="《然後就會報乙個錯誤

error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

void test(int x,int y,int& n=0)

^顯然不能同時使用引用和預設來達到獲取臨時變數,又擁有預設函式的方便。

因為& 引用的內部實現是唯讀指標,所以 int& n=0

只能寫成

const int &n=0

這樣的話,n就不能變,那怎麼賦值,怎麼獲取臨時變數。

那想要達到這兩個目的就沒辦法了嗎?有的,有很多辦法,另寫乙個函式啊,繼承啊之類的辦法也有。

我認為最簡單的,也是最接近我的直覺的是 預設和指標。引用是唯讀指標,指標就可以達到目的啊!!!

#include using namespace std;

void test(int x,int y,int* p=null)

{ int z = x+y;

if (p!=null ){

*p= z;

cout<<"z= "<<*p《指標判斷,不然可能要崩潰的喲!

C 引用DLL版本衝突

手動引用兩個版本的dll錯誤的原因是我 publickeytoken 大小寫的問題 竟然沒校驗 但我想不明白,這樣搞如果依賴一多的話,甚至那個 publickeytoken 都不統一的話,那管理起來不是會特別麻煩嗎?以下是原問題內容 工程中要用到zookeeper,他依賴乙個低版本的log4net,...

Android studio引用包衝突

all com.android.support libraries must use the exact same version specification mixing versions can lead to runtime crashes 當我們使用android studio新增一些第三方...

引數預設,引用

本篇文章將整理出關於引數預設和引用的一些知識。一 引數預設 引數預設包括全預設和半預設。顧名思義,全預設就是函式的所有引數都給出預設值,半 預設就是僅有函式的部分引數給出了預設值。看下邊的一段 includeusing namespace std int add int x,int y int ma...