LINUX.ORG.RU
решено ФорумTalks

[c++] несколько вопросов

 


0

0

1.

double Funct1 (double *a) { return sin(*a)/2; }
double Funct2 (double &a) { return sin(a)/2; }

Что быстрее — Funct1(b*) или Funct2(b)?

2. Некоторые советуют избегать системы эксепшнов. Почему? Как быть?

3. Немного не по теме. Как-то видел софтину по анализу проектов. Считала количество строк, объём комментариев и т.п. Забыл название. Подскажите.

4. Посоветуйте книжку по Qt (бумажную).

5. Посоветуйте ман по doxygen.

★★★★★
0000000000000000 <f1(double&)>:
   0:   f2 0f 10 07             movsd  (%rdi),%xmm0
   4:   e9 00 00 00 00          jmpq   9 <f1(double&)+0x9>
   9:   90                      nop
   a:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

0000000000000010 <f1(double*)>:
  10:   f2 0f 10 07             movsd  (%rdi),%xmm0
  14:   e9 00 00 00 00          jmpq   19 <f1(double*)+0x9>

PS: Все-таки жалко, что сегодня в вузах не дают ассемблера а начинают сразу с дельфей.

bibi
()

Некоторые советуют избегать системы эксепшнов. Почему?


Потому что типа «накладные расходы»

Как быть?


все равно прийдется организовывать обработку ошибок тем или иным способом.

Поэтому лучше сразу использовать среду,
где исключения обрабатываются единообразно по всей системе,
например
gocosmos.org

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

оно решило ничего не делать? > a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)

а это чего делает?

ничего. это мусор для паддинга. до него управление не доходит, ибо ret делается глубже, уже за PLT.

и где ответ на вопрос то?

а разве не видно из кода?

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

>PS: Все-таки жалко, что сегодня в вузах не дают ассемблера а начинают сразу с дельфей.

Конкретно для & vs * ассембдлер не нужен. Достаточно знать, что & - это * для ограниченных.

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

А какой программой Вы получили такой вывод? Я попробовал gcc -S main.cpp там совершенно другое.

$ cat test.cpp

#include <cmath>

double
f1(double *arg)
{
    return sin(*arg);
}

double
f1(double &arg)
{
    return sin(arg);
}

$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -c -Wall -Werror -O2 test.cpp
$ objdump -DC test.o

test.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <f1(double&)>:
   0:   f2 0f 10 07             movsd  (%rdi),%xmm0
   4:   e9 00 00 00 00          jmpq   9 <f1(double&)+0x9>
   9:   90                      nop
   a:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

0000000000000010 <f1(double*)>:
  10:   f2 0f 10 07             movsd  (%rdi),%xmm0
  14:   e9 00 00 00 00          jmpq   19 <f1(double*)+0x9>
Disassembly of section .eh_frame:
...............
bibi
()
Ответ на: комментарий от bibi

Собственно на ассемблерном выводе из g++ все тож самое. Только с декорацией имен.

        .file   "test.cpp"
        .text
        .align 2
        .p2align 4,,15
.globl _Z2f1Rd
        .type   _Z2f1Rd, @function
_Z2f1Rd:
.LFB101:
        movsd   (%rdi), %xmm0
        jmp     sin
.LFE101:
        .size   _Z2f1Rd, .-_Z2f1Rd
.globl __gxx_personality_v0
        .align 2
        .p2align 4,,15
.globl _Z2f1Pd
        .type   _Z2f1Pd, @function
_Z2f1Pd:
.LFB100:
        movsd   (%rdi), %xmm0
        jmp     sin
bibi
()
Ответ на: комментарий от bibi

так ответ одинаково?

да


PS: Ну сами граждане посудите как может быть иначе, если с точки зрения языка в обоих случаях передается адрес объекта а внутри ф-и идентичны. Чему тут различаться то?

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

Ну вот самим и пришлось посудить, заставляют тут думать, негодяи

RedPossum ★★★★★
()

К стати насколько я знаю правильнее сравнивать так:

double Funct1 (double* const a) { return sin(*a)/2; } 
double Funct2 (double& a) { return sin(a)/2; }
keeper_b ★★★★
()
Ответ на: комментарий от keeper_b

double Funct1 (double* const a) { return sin(*a)/2; }

double Funct2 (double& a) { return sin(a)/2; }

Абсолютно идентично. По крайней мере с точки зрения сгенерированного кода. Что и не удивительно.

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

>Абсолютно идентично. По крайней мере с точки зрения сгенерированного кода. Что и не удивительно.

Да!

Я о том, что в случае ссылки мы можем ей передать адрес только при инициализации.

А указатель потом можно и переназначить.

const после звёздочки блокирует возможность переназначить переменную указатель на что нибудь ещё.

keeper_b ★★★★
()

>Что быстрее — Funct1(b*) или Funct2(b)?

Вообще, одна из самых главных вещей в профессии - не отвлекаться на такую хренотень.

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

Вообще, одна из самых главных вещей в профессии - не отвлекаться на такую хренотень.

Ладно-ладно. Всему свой черед. Не представляю себе человека профессии, который бы не знал на собственном пытливом опыте ряда подноготных вещей. Это уже потом все идет на автомате. Но с автоматом в руках не рождаются. 'И опыт, сын ошибок трудных. И гений, парадоксов друг' (с) А.С.

bibi
()

> 3. Немного не по теме. Как-то видел софтину по анализу проектов. Считала количество строк, объём комментариев и т.п. Забыл название. Подскажите.

sloccount

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

>что сегодня в вузах не дают ассемблера а начинают сразу с дельфей.

мне давали делфи параллельно с асмом, сразу с первого семестра

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

>> 3. Немного не по теме. Как-то видел софтину по анализу проектов. Считала количество строк, объём комментариев и т.п. Забыл название. Подскажите.

sloccount

Точно :). Искал через pacman -Ss slon.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от bibi

Все-таки жалко, что сегодня в вузах не дают ассемблера а начинают сразу с дельфей.

У нас и С толком не было. Не профильное.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от ArsenShnurkov

Поэтому лучше сразу использовать среду,

где исключения обрабатываются единообразно по всей системе,

например

gocosmos.org

Физик Михаил Зотов на собственном опыте

пытается опровергнуть устоявшиеся мифы

и заблужденя, сложившиеся вокруг Slackware Linux

а вообще не смешно, я кроссплатформенную штуку пишу

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от linuxfan

> Достаточно знать, что & - это * для ограниченных.

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

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Unnamed_Hero

Надо же, всего 1500 экземпляров. Куплю как-нибудь. Пока что взял у знакомого вот такую: http://www.ozon.ru/context/detail/id/4005805/ (Жасмин Бланшет, Марк Саммерфилд. Qt 4. Программирование GUI на C++)

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Unnamed_Hero

давно уже скачал, с бумаги просто приятнее

у меня белая библия и Шилдт бумажные есть... ещё Страуструп (правда, нахрен он нужен)... Пусть и Максим Шлей будет. Он так назывался когда-то :). В Германии живёт. Книгу эту на русском писал.

пруф: http://www.firststeps.ru/mfc/msdn/r.php?114

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