Является ли «один за другим»? указатель типа не-массива допустимая концепция в C ++?

Стандарт C ++ [sec 5.7] гласит:

Если и операнд указателя, и результат указывают на элементы одного и того же объекта массива или одного последнего
последний элемент объекта массива, оценка не должна производить переполнение; в противном случае поведение
не определено.

Итак, правильно ли я предположить, что указатели один за другим других типов, кроме массивов, не определены?

Например:

int a = 0;
vector<int> v(&a, (&a)+1);

Приведенный выше фрагмент компилируется и работает просто отлично (с g ++), но так ли это?

20

Решение

Нет, это законно. 5.7 (4) — один абзац перед вашей цитатой — гласит: «Для целей этих операторов указатель на объект без массива ведет себя так же, как указатель на
первый элемент массива длиной один с типом объекта в качестве его типа элемента. «

25

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]