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

Теория - C++

Восстановить пароль Регистрация
 
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
02.03.2011, 18:50     Теория #1
Добрый день! Появились парa вопросов по теории.
1) Есть ли какая то разница между обращением p-> и (*p). ? Если есть - то желательно примерчик, когда она проявляется.
2) Есть ли разница по скорости доступа между прямым доступом к a и через getA()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class aaa
{
 public:
 int a; 
 aaa()
 {
  a=0;
 }
 int getA()
 {
   return(a);
 }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 18:50     Теория
Посмотрите здесь:

C++ теория
теория C++
теория C++
C++ Теория
теория C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
02.03.2011, 19:00     Теория #2
Цитата Сообщение от KuKu Посмотреть сообщение
Есть ли какая то разница между обращением p-> и (*p).
Здесь не уверен, но подозреваю, что никакой.
Цитата Сообщение от KuKu Посмотреть сообщение
Есть ли разница по скорости доступа между прямым доступом к a и через getA()
Здесь, конечно, уже есть, потому что обращение через функции требует дополнительных ресурсов на вызов этой самой функции. Однако, в случае расопложения данных класса в открытый доступ и прямого обращения нарушается инкапсуляция.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.03.2011, 19:04     Теория #3
1) Насколько мне известно, разницы никакой. Разве что в удобстве. Если ошибаюсь, думаю, коллеги поправят)))
2) Если компилятор по какой-то причине не пожелает сделать эту функцию встраиваемой, то разница по скорости конечно будет. Ведь надо будет перейти в функцию getA, а затем скопировать a в место вызова.

Добавлено через 1 минуту

Не по теме:

fasked, опередили, как обычно)))

KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
02.03.2011, 19:07  [ТС]     Теория #4
Цитата Сообщение от fasked Посмотреть сообщение
Здесь не уверен, но подозреваю, что никакой.

Здесь, конечно, уже есть, потому что обращение через функции требует дополнительных ресурсов на вызов этой самой функции. Однако, в случае расопложения данных класса в открытый доступ и прямого обращения нарушается инкапсуляция.
Про вызов функции это ясно. Не так выразился, есть ли существенная разница в скорости? В каком-нибудь к примеру флэше эта разница очень приличная. Может как то компилятор оптимизирует ?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.03.2011, 19:10     Теория #5
KuKu, как я уже сказал, вполне возможно, что он сделает данную функцию встраиваемой (вероятнее всего так он и сделает). Т.е. вместо вызова подставится тело, в данном случае это будет полностью эквивалентно прямому доступу к a.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
02.03.2011, 19:11  [ТС]     Теория #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
1) Насколько мне известно, разницы никакой. Разве что в удобстве. Если ошибаюсь, думаю, коллеги поправят)))
Хм.. а опять же в скорости есть ли разница?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 19:30     Теория
Еще ссылки по теме:

C++ Теория по С++
Теория по С++ C++
Теория по С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
02.03.2011, 19:30     Теория #7
Цитата Сообщение от KuKu Посмотреть сообщение
Хм.. а опять же в скорости есть ли разница?
Результат одинаковый
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <boost\progress.hpp>
 
class Sample {
public:
    int a, b, c;
};
 
int main()
{
    Sample *s = new Sample;
 
    boost::progress_timer t;
    for (size_t i = 0; i < 0xFFFFFF; ++i)
        (*s).a = i, (*s).b = i, (*s).c = i;
    //  s->a = i, s->b = i, s->c = i;
 
    delete s;
    return 0;
}
Yandex
Объявления
02.03.2011, 19:30     Теория
Ответ Создать тему
Опции темы

Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru