如果你去的這個postC++:什麼是:: for?
接受的答案可能有人請解釋爲何他用:
double temp = ::atof(num.c_str());
,而不是簡單
double temp = atof(num.c_str());
此外,有認爲是一個很好的做法在使用「純」全局函數時使用該語法?
如果你去的這個postC++:什麼是:: for?
接受的答案可能有人請解釋爲何他用:
double temp = ::atof(num.c_str());
,而不是簡單
double temp = atof(num.c_str());
此外,有認爲是一個很好的做法在使用「純」全局函數時使用該語法?
它說使用全局版本,而不是在本地範圍內聲明的一個。所以如果有人在你的課堂上宣稱atof
,這個肯定會用到全球的。
#include <iostream>
using namespace std;
int n = 12; // A global variable
int main() {
int n = 13; // A local variable
cout << ::n << endl; // Print the global variable: 12
cout << n << endl; // Print the local variable: 13
}
::
是範圍解析操作。它在這種情況下作爲一元運算符使用,is to ensure that the name (atof
) is always looked up in the global scope - 這可以用於防止名稱隱藏干擾查找。
這很有趣,微軟和維基百科的例子幾乎是相同的 - 我不知道哪些是複製的? – Skilldrick 2010-02-17 17:17:14
最有趣的是,這應該是C++的'std :: atof()';) – 2010-02-17 18:04:32
::func()
表示此功能不隸屬於任何特定的類。當存在許多具有相同名稱的函數時使用它,並避免在想要的函數與函數名稱前的特定成員函數之間發生混淆。
從C++入門,第4版,第17.2.1節:
「在全球範圍內定義的名字 - 以外的任何類,函數聲明的名稱或命名空間 - 在全局命名空間中定義的全局。名稱空間是隱式聲明的,並存在於每個程序中,每個定義全局範圍實體的文件都將這些名稱添加到全局名稱空間中
範圍運算符可用於引用全局名稱空間的成員。隱含的,它沒有名稱;記號
::member_name
引用全局命名空間的成員。「
假設你有一個函數f()
的兩個版本,一個在名稱空間之外定義,另一個在裏面定義。現在讓我們假設你在同一個命名空間中還有一個功能g()
。現在,如果你在g()
內部執行f()
,它將調用在同一個命名空間中定義的那個。但是,如果你想打電話給你的全球版本,你需要做::f()
::運算符是範圍解析運算符。
當與類說明符一起使用時,它類似於A :: a,它訪問類A的數據記憶器a。當使用沒有任何說明符的數據記憶器時,它訪問全局變量。
它主要用於以下比賽。
另外,你如何創建一個stackoverflow鏈接,使得當有人點擊它,它直接回答(而不是在頁面的開始)? – sivabudh 2010-02-17 17:05:53
關於直接回答鏈接,請查看「鏈接」鏈接答案底部的左下角。 – 2010-02-17 17:07:33
像這樣:http://stackoverflow.com/questions/1012571/stdstring-to-float-or-double/1012604#1012604 – 2010-02-17 17:07:35