LINUX.ORG.RU

вычисление размера


0

0

код приблизительно такой:

template<class T> 
void func1(T *point)
{
  .......
  size_t szT = sizeof(point);
  .......
}

int main(int argc, char **argv)
{
  char chBuf[]={'1','2','3','4','5','6','7','8'};
 size_t szChar = sizeof(chBuf);
 ......
  func1(chBuf);
 ......
 return 0;
}

почему szChar = 8, а szT = 4?

Ответ на: комментарий от sdr

IMHO  в 

void func1(T *point)
{
  .......
  size_t szT = sizeof(point);
  .......
}

никак

А если попробовать передать размер в явном виде?
типа 
void func1(T *point, size_t size)


Dead ★★★★
()
Ответ на: комментарий от corpus

Это не пойдет. sizeof(*point) == sizeof(T). И никак не пойдет: поскольку в C/C++ нельзя передать массив в качестве аргумента (*), никаким образом узнать его размер внутри функции нельзя. Поэтому (1) либо нужно передавать размер явно (2) либо использовать std::vector и т. п.

(*) когда массив передается как аргумент, он преобразуется в указатель на первый элемент -- впрочем, как и почти в любых других случаях.

aa5779
()
Ответ на: комментарий от aa5779

да, согласен, виноват - не посмотрел на код выше... думал объект передаётся.

corpus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.