Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: шаблон функции, пример кода
 
 автор: Drive.it   (19.04.2012 в 21:20)   письмо автору
 
 

код:

#include <iostream>

template <class type>
void func(type var)
{
//var*=var;

std::cout << std::endl << var;
}
int main()
{

int x = 1;
//int* x;

func(x);
return 0;
}



Функция func принимает переменную типа type (template) и выводит на экран ее содержимое.
В аргументе функции ничего не сказано об указателях(type var). Если раскомментировать int* x; и x*=x; и закомментировать int x = 1; то компилятор ругается матом, это очевидно, потому что указатель умножается на указатель. Вопрос вот в чем, почему шаблонная функция имеет право принимать адрес? Как защитить функцию от указателей, если для функции требуются только типы данных для арифметических вычислений.
PS рассматривал вариант разыменования указателя, но как определить что это указатель или переменная =)

  Ответить  
 
 автор: cheops   (21.04.2012 в 14:38)   письмо автору
 
   для: Drive.it   (19.04.2012 в 21:20)
 

Как вариант не использовать указатели вообще, только ссылки. Указатели - это инструмент C, в C++ не поощряется использование указателей, так как они позволяют обходить строгую типизацию, что и происходит в вашем случае. Либо все знайте и предусматривайте заранее, либо отказывайтесь от указателей вообще.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования