我剛剛開始學習C ,我在一本書上看到了這句話。我并不完全理解它的確切含義。誰能用一個例子簡單地解釋一下它的意思呢?
我找到了這個鏈接,但它并不十分清楚它在說什么
。鏈接。https://en.cppreference.com/w/cpp/language/default_arguments
uj5u.com熱心網友回復:
我們可以使用靜態變數作為方法和/或函式引數的默認值。
而且unevaluated可以意味著不從讀取,就像sizeof myVariable,其中只有變數型別的大小被獲取(從來沒有實際值)。
但是,即使是使用sizeof myVariable(作為默認引數),也只是在核心語言文字組(又稱CWG)的2082號票中才可以。
uj5u.com熱心網友回復:
你首先需要理解未評估的背景關系的概念。與其說我在解釋,不如說我找到了精彩的細節這里和這里。
。簡而言之:
換句話說,未評價的運算元是語言的某些運算元的運算元。它們在所有方面都是運算式,但它們從未被評估過。原因是這些運算子的存在只是為了查詢其運算元的編譯時屬性。
例如,sizeof運算子只查詢資料型別的大小,并不進行評估。
回到回答你最初的問題:
在函式宣告中,你不能傳遞一個區域變數(比如n)作為默認引數,例如,
void f()
{
int n = 1;
extern void g(int x = n); //錯誤。本地變數不能是
然而,未評價的運算元(例如sizeof)是允許的,例如:
void f()
{
int n = 1;
extern void h(int x = sizeof n)。// OK as of CWG 2082.
注意,n是本地變數,但是,sizeof是變數n的未評估運算元(在大多數現代機器上,結果將是4位元組)。
希望這對你有所幫助(p.s:我沒有聲譽來評論,所以直接回答)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314132.html
標籤:
上一篇:如何區分ascii值和數字?
