簡體   English   中英

C ++中變量定義操作的價值是什么?

[英]What is the value of a variable definition operation in C++?

在C ++中,變量定義成為一個操作,在此之前它們不在C中。 進行了這一更改,以便您可以將循環變量定義放在for循環中,例如

for (int i = 0; i < N; i++) {
    printf("%d", i);
}

我的問題是變量定義操作的價值是什么,例如在這種情況下,在這個例子中將執行什么條件語句:

if (int i = N) {
    printf("yes");
} else {
    printf("no");
}

如果初始化后的i值不等於零,則執行if子實例。 否則將執行else子語句。

更確切地說(C ++標准,6.4選擇語句)

4在switch語句之外的語句中作為初始化聲明的條件的值是上下文轉換為bool的聲明變量的值

並且(4.12布爾轉換)

1算術,無范圍枚舉,指針或指向成員類型的指針的prvalue可以轉換為bool類型的prvalue。 零值,空指針值或空成員指針值轉換為false; 任何其他值都轉換為true。

考慮一個簡單的例子

#include <iostream>
#include <cstring>

//...

char nickname[] = "mgn1993";

if ( char *p = std::strchr( nickname, 'm' ) ) *p = 'M';

std::cout << nickname << std::endl;

在這個代碼片段中,變量p只需要在if語句的子語句中。 在外部范圍內聲明變量沒有多大意義。

您可以將其用作評估表達式的簡寫,並在if塊中使用其返回值。 例如

if (int i = calculateSomething()) {
   // do something with i
}

這相當於

int i = calculateSomething();
if (i) {
   // do something with i
}

除了i的范圍僅限於if

在提供的示例中,如果N具有非零值(在C ++中將評估為布爾值true),則輸出將為“是”。 給定示例沒有實際價值,因為您可以非常輕松地用“N”替換整個賦值並實現相同的效果。

也許有一些奇怪的邊緣情況,我們非常需要使用並且能夠在N為非零時調整N中包含的值,並且我們同時需要絕對確保范圍僅限於if語句,但這似乎不太可能。

也就是說,在for循環中聲明變量肯定有其優點。 對於初學者來說,范圍僅限於循環,一些編譯器專門針對它進行優化,可能更清晰的代碼等。

變量定義的值是變量本身。

int i = 0; // is 0, and is therefore false
int j = 5; // is 5, and is therefore true

變量定義的范圍是它適用的塊。

所以:

if(int i = returnSomething()) {
    // This point is reached if returnSomething() did not return 0
    // i is defined in this block and can be used.
}
// i is not defined at that point, its scope being limited to the if block above

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM