2009-10-31 45 views
1
#include <iostream> 
using namespace std; 
struct testarray{ 
    int element; 
public: 
    testarray(int a):element(a){} 
}; 
class myarray 
{ 
public: 
    testarray i; 

    public: 
      myarray(testarray a) : i(a){ } 


} ; 
int main() 
{ 
    myarray objArray[3] = {1,2,3}; 

    return 0; 
} 

上述代碼在Visual C++ 2005 Express Edition IDE中編譯得很好。但我想要的是防止編譯器隱式類型化對象類型。如何防止編譯器對類構造函數參數進行隱式類型轉換?

回答

4

可以使用explicit關鍵字爲你的結構構造。

9

對於testarray構造函數使用關鍵字explicit,以便編譯器不執行隱式轉換。基本上你需要編寫構造函數:

explicit testarray(int a):element(a){} 
+0

更一般地說,總是使用'explicit'將可以用單個參數調用的構造函數(考慮默認值)寫入。並仔細評估,如果可以採取'顯式'出來之前刪除它,它可能會節省一些打字,但它會引入錯誤:) – 2009-10-31 16:15:01

1

是的,如上所述使用關鍵字「explicit」。 關於您提供的源代碼的另一個建議是:爲什麼在結構中有「public」?所有結構的成員默認都是公共的。如果你想用不同的訪問修飾符(比如說幾個「私有」成員或方法),你最好使用類。

+1

感謝觀察代碼是純粹寫爲實驗目的而寫,但我明白,我仍然應該編碼它整齊。 – pushkarpriyadarshi 2009-11-01 10:57:43

相關問題