Как все говорили в комментариях:
sizeof(std::vector<double>::value_type)
или
sizeof(decltype(myVec)::value_type)
Последний требует C ++ 11, но не требует повторного ввода типа std::vector
.
В отличие от sizeof(myVec[0])
это всегда дает правильный результат. Это не относится к первому, потому что есть исключение для std::vector<bool>
, которое ведет себя иначе, чем другие std::vector
, и в частности myVec[0]
не возвращает bool&
.
Кроме тогоТочка sizeof(myVec[0])
всегда в порядке, хотя. Даже если вектор будет пустым в точке, где вы используете это выражение, аргумент sizeof
является неоцененным операндом. Выражение myVec[0]
фактически не вычисляется, а элемент вектора фактически не принимается. Вместо этого вычисляется только тип результата, и по типу можно определить размер типа. Таким образом, здесь нет причины для неопределенного поведения, если вектор пуст. И как это может быть? sizeof
оценивается во время компиляции, но во время компиляции мы можем даже не знать, что находится в векторе. Вектор как объект обычно даже не существует во время компиляции.