C#中的C ++ const size_t的等价物是什么?

时间:2013-02-09 13:07:37

标签: c# c++

我正在尝试将一些Ogre代码翻译成它的C#版本,但我遇到了一个问题:

    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
    };

基本上,C#中不存在const size_t,并且const int不能用于声明数组的大小。

我想知道如何使用常量值声明数组?

5 个答案:

答案 0 :(得分: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
    };

答案 1 :(得分:2)

  

基本上,C#中不存在const size_t,并且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
};

唯一的区别是,如果初始化程序中的项目数与您指定的数字不匹配,则会出现编译时错误。

答案 2 :(得分:1)

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

这是如何在C#

中声明arrays

答案 3 :(得分:1)

在C ++中,size_t是一个至少为16位的无符号整数类型,它遵循CPU的本机整数类型。换句话说,sizeof(size_t)并不固定,即使大多数人将其用作'unsigned int'。在C#中没有这样的东西。

C#中的大小(f.ex.使用数组和列表时)通常是'int'类型,它是一个32位整数。

在你的情况下,我可能会使数组只读,并使用'vertices.Length',例如:

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

或者在这种情况下,我可能将其定义为2D数组并使用vertices.GetLength:

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

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

答案 4 :(得分:1)

所有这些答案实际上都没有回答什么类型相当于size_t的问题。在.NET中size_t的正确类型是UIntPtr。它在32位平台上为32位,在64位平台上为64位,未签名。它是唯一真正等同的类型。