"Entiendo que Set es sólo un puntero a la matriz estática de 10 enteros"
No, eso está mal: es una matriz, no un puntero.
Aún puede inicializarlo en la lista de inicializadores del constructor.
Para un compilador que no es compatible con C++ 11 rizado llaves de inicialización (Visual C++ versión 11 y anteriores viene a la mente) que tendrá que saltar a través de algunos aros, aunque, como se muestra a continuación:
#include <iostream>
#include <vector>
using namespace std;
#define CPP11
#if defined(_MSC_VER)
# if (_MSC_VER <= 1700)
# undef CPP11
# endif
#endif
#ifdef CPP11
class Cpp11
{
private:
int set_[10];
public:
Cpp11()
: set_{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
{}
int foo() const { return set_[3]; }
};
#endif
class Cpp03
{
private:
struct IntArray10 { int values[10]; };
IntArray10 set_;
static IntArray10 const& oneToTen()
{
static IntArray10 const values =
{ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} };
return values;
}
public:
Cpp03()
: set_(oneToTen())
{}
int foo() const { return set_.values[3]; }
};
int main()
{}
en lugar de utilizar matrices primas, sin embargo, utilizar std::vector
y C+++ 11 std::array
, ambos de los cuales son apoyados incluso por Visual C++ 11.
por lo que vale la pena, 'Set' no es sólo un puntero a una array de enteros '10', ni' static' aquí. Más bien, el nombre de la matriz 'Set' se descompone en un puntero al primer elemento de la matriz en ciertas situaciones. La diferencia se puede ver claramente usando 'sizeof' - es decir' sizeof (Set) == 10 * sizeof (int)! = Sizeof (int *) '. –
@StuartGolodetz Gracias por la aclaración. Cuando dije estático, quise decir estático en la forma en que está almacenado con el objeto/instancia, y no solo en otro lugar en el montón. Por supuesto, ese es un gran uso indebido del término "estático" de mi parte; lo siento. – Serge
No te preocupes :) Solo intentaba aclarar la distinción entre matrices y punteros con la posibilidad de que hubiera habido un malentendido allí. –