Форум программистов, компьютерный форум CyberForum.ru

Выбор шаблонного варианта для аргумента-массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка "Недопустимый else без парного if" http://www.cyberforum.ru/cpp/thread1273030.html
#include <iostream> #include <stdio.h> using namespace std; // ВЫВОД МАТРИЦЫ НА ЭКРАН void print(int **Q, int x, int y) { int i, j; for (i = 0; i<x; i++)
C++ Unexpected() не вызывается Всем привет! Читаю бессмертный труд Страуструпа Язык программирования С++издания 2011 года (п.14.6 о спецификации исключений): Если во время своего выполнения она (функция со спецификацией исключений) попробует произвести действия, нарушающие объявленную гарантию, такая попытка приведет к вызову стандартной функции std::unexpected (). По умолчанию, функция std::unexpected() вызывает... http://www.cyberforum.ru/cpp/thread1273018.html
Разделить функцию на две C++
Выполнил контрольную. Все работает как надо. Но потом заметил, что пропустил в условии "минимум 2 функции". Помогите без потерь переместить кусок кода из 1 функции в другую. Желательно тот кусок, который "//вычисляю строку по убыванию и записываю ее номер". #include <stdio.h> int dop(int,int,int,int); #define nn 20 int main() { int mas,l,h,i,j,k,s;
C++ Найти среднее арифметическое массива
Для B найти среднее арифметическое подсказка: S2(вещественное)=sum(целое)/n 1) сделать sum вещ. 2) s2=1.+sum/n 3)s2=float(sum)/n
C++ Перевод из 6-ричной системы в десятичную http://www.cyberforum.ru/cpp/thread1272994.html
На вход программе подается строка символов, оканчивающаяся точкой, и состоящая из ненулевого количества неотрицательных целых чисел, записанных в 6-ричной системе счисления. Каждые 2 соседних числа разделены непустой последовательность пробелов и/или :. Каждое число состоит не более, чем из 5-ти разрядов, ведущие нули и знак + не используется. Общая длина строки, включая точку, не должна...
C++ Создание шахматного поля Добрый вечер. Я пытаюсь написать простую игру шахматы в ООП, с графикой. Начала с создание доски и описания классов: поле(field) и клетки черные и белые(cell). Я не очень понимаю как использовать графику. Хочу создать поле как массив клеток 8х8. Я попыталась описать классы, вот что получилось. Помогите, пожалуйста, дописать, чтобы строились клетки. Я понимаю, что это делается как-то через функции... подробнее

Показать сообщение отдельно
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
11.10.2014, 23:15     Выбор шаблонного варианта для аргумента-массива
IGPIGP, у тебя в самом начале рассуждений ошибка, которая и завела тебя в тупик.
Вот здесь:
Цитата Сообщение от IGPIGP Посмотреть сообщение
то есть снова к T*, ссылка на массив и ссылка на тип разные звери и преобразование к ссылке int& не будeт и тут
никто не утверждал, что будет преобразование к ссылке на тип. Я писал:
Цитата Сообщение от DrOffset Посмотреть сообщение
T разрешится в ссылку на массив
Т.е. при использовании варианта
C++
1
2
template <typename T>
void foo(T & t)
с аргументом a, где а объявлен как int a[100], то T будет int[100], итого получим ссылку на массив, при подстановке T = int[100] аргумент будет выглядеть как int (&)[100].

Цитата Сообщение от Tulosba Посмотреть сообщение
Не очень понял, почему преобразование к ссылке (не важно, константной или нет) приоритетнее преобразования к константному указателю.
Скопирую ответ из ЛС:
Цитата Сообщение от DrOffset Посмотреть сообщение
Преобразование к ссылке рассматривается как отсутсвие (identity) преобразования (13.3.3.1.4) в нашем случае.
Преобразование к указателю одного ранга с отсутствием преобразования (демонстрация неоднозначности в моем посте)
А вот константность добавляет Qualification conversion, которая не смотря опять же на одинаковый ранг, разрешается исходя из фактической cv-квалификации аргумента (см. 13.3.3.2/3). Если есть перегрузка, где не требуется преобразование неконст->конст то будет выбрана именно она.
Цитата Сообщение от Tulosba Посмотреть сообщение
И убрав при этом версию с указателем вовсе?
Да, придется убрать. Впрочем, можно не обращать внимания на ту часть моего ответа, где я предлагал способ лечения этого, т.к. я слегка торопился и скомкал эту часть, да и к теме это напрямую не относится - все и так знают как это лечить.

Добавлено через 6 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Почему имя массива может подойти там где объявлена ссылка на тип и ожидается то что приводится к T?
Она подойдет если нет других более подходящих вариантов. Об этом и была речь. В варианте Tulosba более подходящей является перегрузка с указателем. Добавив const к ней мы сделали более подходящим вариант со ссылкой. Про детали я уже выше написал.

Добавлено через 12 минут
Вообще вся эта кухня на самом деле довольно сложна.
Но можно использовать небольшие эмпирические правила:
1) Всегда применяется наиболее специализированный шаблон.
2) Перегрузка разрешается всегда в пользу наименьшего количества преобразований (или их отсутствия).
 
Текущее время: 19:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru