[英]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.