2015-04-06 2 views
1

НапримерКак инициализировать собственный указатель и массив C++ 11 в классе?

class A 
{ 
int *p{}; // is this fine without giving the null pointer value 0? 
int p[3]{}; // is this fine without double braces {{ }}? std::array need. 
}; 

Мое тестирование показывает, что они проходят компилятор Intel C++. Но не уверены, являются ли они стандартными или нет?

ответ

5

Да и да.

Было бы лучше явно инициализировать с помощью nullptr, например int *p = nullptr;.

int p[3]{} будет инициализировать каждый p с помощью int {}.

1

Поскольку C++ 11, члены данных любого типа, включая агрегат (например, тип массива), могут быть инициализированы различными способами с использованием равномерного list-init syntax. Поставив пустую пару фигурных скобок в качестве инициализатора, вы выполняете value-initialization. Но вы можете выполнять другие виды инициализаций. Также обратите внимание, что, поскольку C++ 14, вложенные фигурные скобки в aggregate initialization можно исключить во всех случаях. Итак, std::array<int, 3> arr{1, 2, 3}; в порядке, так как C++ 14.

Смежные вопросы