一個非常基本的問題,但我一直在這個難題。爲什麼在std :: cout中使用「::」運算符而不是「。」運營商?
爲什麼我們究竟寫
int main(){
std::cout << "HelloWorld!";
}
而不是
int main(){
std.cout("HelloWorld!");
}
據我所知,::運算符用於在類編輯功能,但爲什麼會在這種情況下用來調用std類中的一個函數,而不是。運營商?
一個非常基本的問題,但我一直在這個難題。爲什麼在std :: cout中使用「::」運算符而不是「。」運營商?
爲什麼我們究竟寫
int main(){
std::cout << "HelloWorld!";
}
而不是
int main(){
std.cout("HelloWorld!");
}
據我所知,::運算符用於在類編輯功能,但爲什麼會在這種情況下用來調用std類中的一個函數,而不是。運營商?
::
運算符是範圍解析運算符。前綴可以是一個名稱空間或一個類。
.
運算符用於選擇對象的成員。前綴是結構,聯合體或類類型的表達式(並且通常是該類型的對象的名稱)。
std
是一個命名空間,而不是一個類。即使它是一個類,std::cout
仍然是正確的,如果cout
是該類的靜態成員。 std.cout
只有當std
是對象時纔是正確的,該對象具有名爲cout
的成員類型。
C++ 可以已經被定義爲使用.
對於所有這些情況,但使用的::
爲範圍解析運營商和.
爲成員選擇運算符可以使代碼更易於閱讀,因爲它是更加明確。 (還有其他兩種語言都使用.
。)
這樣做很有意義,謝謝! –
因爲std
不是一個對象,但一個命名空間和scope resolution operator::
用於指定的上下文或範圍的使用來解決的標識符,其中在C++中可以是一個類或一個命名空間。 .
運算符是成員訪問運算符,用於訪問對象的成員而不是類或名稱空間範圍內的名稱。
所以std::cout
意思是「名稱cout
在命名空間std
」,而例如是std::ios_base::binary
在命名空間std
和foo.x
在類ios_base
的範圍定義的常數被命名爲名爲foo
對象的x
成員變量。
那麼'''用於訪問命名空間中的成員'''用於訪問類中的成員? –
這是不正確的。 '::'用於類和名稱空間。 –
@ M.M一個類可以是範圍解析運算符上下文中的'名稱空間'。例如,一個嵌套的類定義存在於其封閉類的名稱空間中。 – mattnewport
'std'不是類。它是名字空間。 –
'.'僅在左側有*值*的情況下使用。它意味着從該值的類中選擇一個成員。 '.'和'::'是C++語言的「allophones」 - 沒有任何情況他們都是正確的,並且會有不同的含義。但它有助於可讀性,因爲如果你看到'.',那麼你就知道你正在使用一個對象。 –