2013-03-12 26 views
0

我有以下結構中的代碼:如何區分聲明和使用函數?

while (x > 0) { 
    something; 
    aaa::bbb::ccc some_name(
     x, 
     y 
    ); 
} 

我不明白什麼aaa::bbb::ccc some_name(。如果它是一個函數調用,爲什麼我們需要指定它的時間aaa::bbb::ccc。如果它是一個函數聲明,爲什麼它在while循環中完成以及爲什麼沒有指定參數的類型?

+2

非常煩人... – 2013-03-12 08:46:46

+4

發佈實際的代碼。 – Pubby 2013-03-12 08:46:58

+1

::是一個範圍解析運算符。 bbb ccc可能是一些靜態成員或方法。 – user1929959 2013-03-12 08:52:39

回答

3

您不在函數調用中指定返回類型,所以這不可能是函數調用。

正如Pubby指出的那樣,它很可能是一個對象定義。您定義一個名爲some_name的對象,其類型爲aaa::bbb::ccc,並將xy傳遞給構造函數。

+3

或者它正在構建一個對象.... – Pubby 2013-03-12 08:49:19

+0

但爲什麼它在一個循環中完成? – Roman 2013-03-12 08:49:41

+0

@羅曼爲什麼不能在循環中完成? – 2013-03-12 08:50:01

0

我不太清楚你正在做什麼,但在C++中

:: 

被稱爲scope-operator和用於訪問namespacesvariables in namespacesstatic類成員。

通常函數 - 聲明和定義出現在函數和方法之外。所以你的代碼沒有任何意義。

請參閱here關於範圍操作符。用於聲明和定義的here

+0

「通常聲明和定義出現在函數之外」?我當然廣泛使用局部變量,這看起來非常像局部變量的定義。 – 2013-03-12 09:31:15

+0

@JamesKanze對不起,我不夠具體。我正在談論**函數** - 聲明和定義。謝謝你的提示。 – 2013-03-12 09:33:13

2

在這種特殊情況下,它可能通過調用其與參數xy兩個參數的構造函數構造aaa::bbb::ccc類型的對象some_name

它在循環中完成的原因可能是該對象在其構造函數和/或析構函數中做了一些有用的工作(它可能是某種形式的範圍守護)。

+0

當然,如果'x'和'y'名稱類型,它是_is_函數聲明。在這種簡單的情況下,它通常很明顯(並且命名約定有幫助)。在更復雜的情況下,它可能不明確---見「最令人頭痛的解析」。 – 2013-03-12 09:29:57