Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ - его сила и его слабости, обсудить 
:(
    Опции темы
MAKCim
Дата 8.2.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Romikgy @  8.2.2007,  14:18 Найти цитируемый пост)
есть 

нету
Цитата(Daevaorn @  8.2.2007,  17:40 Найти цитируемый пост)
Есть скорей всего только в С99

нету


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Romikgy
Дата 8.2.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(MAKCim @ 8.2.2007,  17:58)
Цитата(Romikgy @  8.2.2007,  14:18 Найти цитируемый пост)
есть 

нету
Цитата(Daevaorn @  8.2.2007,  17:40 Найти цитируемый пост)
Есть скорей всего только в С99

нету

Я имел ввиду С++ , а не просто С
просто не обратил внимания на то что в том посте без плюсов

PS многие здесь программируют на чистом си без плюсов?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Void
Дата 8.2.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Beltar
Код
# это вызов функции
somefunction(x, arg1 = y, arg2 = z)

Помогает, когда у функции много параметров, а указать надо лишь часть. И читается в таком случае лучше.

Это сообщение отредактировал(а) Void - 8.2.2007, 19:07


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Beltar
Дата 8.2.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Но в Delphi тоже можно:
function f(X:Integer;Y:Integer=1):Integer;

И вызывать можно f(x) и f(x,y).

В чем разница?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Void
Дата 8.2.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Попробую словами: при вызове функции опциональные (строго говоря, не только) аргументы можно указывать в произвольном порядке с помощью синтаксиса <имя параметра> = <значение>.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Beltar
Дата 8.2.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Теперь понятно.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Romikgy
Дата 8.2.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(Void @  8.2.2007,  18:29 Найти цитируемый пост)
Попробую словами: при вызове функции опциональные (строго говоря, не только) аргументы можно указывать в произвольном порядке с помощью синтаксиса <имя параметра> = <значение>. 

пример можно


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
SergeCpp
Дата 8.2.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 3
Всего: 124



Про именованные аргументы Страуструп писал в D&E

Это было предложение Роланда Хартингера

Причина отклонения: группа по расширениям единодушно решила,
что предложение не даёт почти ничего нового,
приведёт к несовместимости с существующим кодом
и будет способствовать распространению неудачного стила программирования

Там есть и альтернативы именованным аргументам,
например, дополнительные типы для представления наиболее типичных вариантов

Void, а ну марш покупать и читать D&E! user posted image

user posted image


Это сообщение отредактировал(а) SergeCpp - 8.2.2007, 20:59
PM MAIL WWW ICQ   Вверх
Void
Дата 8.2.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Я Страуструпа уважаю (а вопросы обратной совместимости уважать себя просто заставляют smile ), но подход с реализацией всего что только можно через библиотеки, не трогая ядро языка, и то, во что он [подход] превратил нынешний C++, как-то не очень… На когда-то желанный C++0x теперь приходится смотреть с опаской.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
SergeCpp
Дата 8.2.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 3
Всего: 124



PM MAIL WWW ICQ   Вверх
Любитель
Дата 8.2.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Насчёт именованных параметров - никогда не будет на уровне языка хотя бы потому, что мы имеем права (и некоторые так делают) в хейдере называть параметры по одному, а в сорсе - по другому. Скажем типично (хотя я не приветствую):
Код

// my_func.h
void my_func(int height, int width);

// my_func.cpp
void my_func(int h, int w)
{
    // ...
}


Естьboost::parameter. Не вглядывался в реализацию, но использование достаточно приятно, правда редко нужно.

Насчёт рестрикта - ещё пару слов. Как таковой он должен применяться не к конкретному указателю, а к их парам. Если функция принимает два параметра, то здесь всё понятно (хотя нелогично к какому именно указателю ставить рестрикт). Но допустим, что у функции три параметра. Между двумя первыми гарантировано соблюдение рестрикта, а вот третий может "вклиниться" в любой из первых двух. Вполне возможно, что однако (теоретически) возможна оптимизация. Возможно, что третий указатель, нужен для просто задания элемента (не из массива). То есть существующий синтаксис рестрикта нелогично описывает ситуацию. Получается мы гарантируем отсутствие алиасов с любыми другими указателями - это возможно очень редко.

Кстати,
Цитата(MAKCim @  7.2.2007,  21:19 Найти цитируемый пост)
GCC полностью поддерживает C99, а значит restrict,

Пддержка не означает использование. Компилер вправе поддерживать его на уровне игнорирования (как это обычно бывает с инлайн). Если функция не экспортируется, то глобальная оптимизация зачастую позволяет выявить отсутствие алиасов (и заюзать оптимизацию) без подсказок с нашей стороны (кроме подсказки в опциях компилера  smile ), что на мой взгляд лучше.


--------------------
PM MAIL ICQ Skype   Вверх
Artemios
Дата 9.2.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 10
Всего: 50



Цитата(Romikgy @  8.2.2007,  21:52 Найти цитируемый пост)
пример можно 


Код

>>> def f(a1=1,a2=2,a3=3,a4=4,a5=5):
...         return a1+a2+a3+a4+a5
...
>>> f(a3=25)
37
>>> f()
15
>>> f(3,4,a5=10)
24
>>> f(a5=1,a3=0,a1=2)
9
>>>


Это сообщение отредактировал(а) Artemios - 9.2.2007, 11:30


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
MAKCim
Дата 9.2.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Любитель @  8.2.2007,  23:28 Найти цитируемый пост)
Компилер вправе поддерживать его на уровне игнорирования (как это обычно бывает с инлайн).

какой-то странный уровень поддержки  smile 
если что то игнорируется в GCC (например export), то warning соответствующий появляется


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 9.2.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Но ведь с инлайн именно так часто получается. Или register-переменные (которыми никто не пользуется  smile ) -  боюсь, что компилер не обратит внимание на ваше требование. В то же время для других (обычных) переменных он при желании возможно разместит их в регистрах.


--------------------
PM MAIL ICQ Skype   Вверх
SergeCpp
Дата 9.2.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 3
Всего: 124



Цитата(Любитель @  9.2.2007,  23:02 Найти цитируемый пост)
...register-переменные (которыми никто не пользуется)...

Последняя stable версия Perl (5.8.8). Начало одной из функций файла util.c
Код
char *
Perl_fbm_instr(pTHX_ unsigned char *big, register unsigned char *bigend, SV *littlestr, U32 flags)
{
    register unsigned char *s;
    STRLEN l;
    register const unsigned char *little
    = (const unsigned char *)SvPV_const(littlestr,l);
    register STRLEN littlelen = l;
    register const I32 multiline = flags & FBMrf_MULTILINE;

    if ((STRLEN)(bigend - big) < littlelen) {
    if ( SvTAIL(littlestr)
         && ((STRLEN)(bigend - big) == littlelen - 1)
         && (littlelen == 1
         || (*big == *little &&
             memEQ((char *)big, (char *)little, littlelen - 1))))
        return (char*)big;
    return Nullch;
    }
//...

Дата модификации файла: 9 января 2006

PM MAIL WWW ICQ   Вверх
Страницы: (8) Все « Первая ... 4 5 [6] 7 8 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.