2013-02-09 73 views
4

我想這是C#版本翻譯一些食人魔代碼,我遇到了一個問題:在C#中C++ const size_t的等價物是什麼?

const size_t nVertices = 8; 
    const size_t vbufCount = 3*2*nVertices; 

    float vertices[vbufCount] = { 
      -100.0,100.0,-100.0,  //0 position 
      -sqrt13,sqrt13,-sqrt13,  //0 normal 
      //... 
      -sqrt13,-sqrt13,sqrt13,  //7 normal 
    }; 

基本上,常量爲size_t並不在C#中存在,const int的,不能用來聲明數組的大小。

我想知道如何聲明具有常量值的數組?

+2

您不需要顯式編寫數組的大小,至少不用C++。 – leemes 2013-02-09 13:09:50

+0

數組已經固定,所以沒有必要根據常量來設置其大小。 – David 2013-02-09 13:10:05

回答

1
float[] array = new float[] { 1.2F, 2.3F, 3.4F, 4.5F }; 

該如何在C#聲明arrays

+1

那麼,這是一種方法。你也可以用不同的方式寫它,包括float [] array = {1.2F,2.3F,3.4F,4。5F};' – svick 2013-02-09 13:24:25

4

爲size_t是一個typedef(有點像#define宏),這基本上是另一種類型的別名。它的定義取決於SDK,但通常是unsigned int

不管怎樣,在這種情況下,因爲他們是常數,所以你知道nVertices是8和vbufCount是48.你可以只寫它像這樣在C#中它並不真正的問題:

const int nVertices = 8; 
const int vbufCount = 3 * 2 * nVertices; 

float[] vertices = new float[vbufCount] { 
    -100.0,100.0,-100.0,  //0 position 
    -sqrt13,sqrt13,-sqrt13,  //0 normal 
    //... 
    -sqrt13,-sqrt13,sqrt13,  //7 normal 
    }; 
+2

順便說一句,這將不會編譯,因爲'100.0'是'double',它不能隱式轉換爲'float'。你可以通過使用'f'後綴:'100.0f'來解決這個問題。 – svick 2013-02-09 13:33:38

2

基本上,const size_t在C#中不存在,並且const int不能用於聲明數組的大小。

這不是因爲const int,而是因爲數組大小不是C#中數組類型的一部分。你可以改變你的代碼如下:

float[] vertices = { 
     -100.0f,100.0f,-100.0f,  //0 position 
     -sqrt13,sqrt13,-sqrt13,  //0 normal 
     //... 
     -sqrt13,-sqrt13,sqrt13,  //7 normal 
}; 

還有其他幾種方法可以做同樣的事情,包括:

const int nVertices = 8; 
const int vbufCount = 3*2*nVertices; 

float[] vertices = new float[vbufCount] { 
     -100.0f,100.0f,-100.0f,  //0 position 
     -sqrt13,sqrt13,-sqrt13,  //0 normal 
     //... 
     -sqrt13,-sqrt13,sqrt13,  //7 normal 
}; 

唯一的區別是,如果項目在初始化的數量沒有按與您指定的數字不匹配,您將收到編譯時錯誤。

1

在C++中,size_t是一個至少16位的無符號整數類型,它遵循CPU的本地整數類型。換句話說,sizeof(size_t)不是固定的,即使大多數人將它用作'unsigned int'。在C#中沒有這樣的事情。

C#中的大小(使用數組和列表時的f.ex.)通常是一個32位整型的「int」類型。

在你的情況,我可能會做陣列只讀和使用「vertices.Length」,如:

private readonly float[] vertices = new float[] 
    { 
     1f,2f,3f,4f,5.2f // etc 
    }; 

或在這種情況下,我可能把它定義爲一個二維數組,並使用vertices.GetLength :

private readonly float[,] vertices = new float[5,5]; 

    // fill in code: 
    vertices[0, 0] = 0; 
    // etc 
1

所有這些答案都沒有真正回答什麼類型等同於size_t的問題。 .NET中size_t的正確類型是UIntPtr。它在32位平臺上是32位,在64位平臺上是64位,並且沒有簽名。這是唯一真正相同的類型。

相關問題