Форум программистов, компьютерный форум, киберфорум
Наши страницы

Переменные ссылочного типа. Просьба разжевать и положить в рот. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ «Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». http://www.cyberforum.ru/cpp-beginners/thread174031.html
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких конструкциях) можно использовать шаблон с параметром-шаблоном или...
C++ Алгоритм для извлечения квадратного корня x из вещественного числа y Составить блок-схему алгоритма для вычисления квадратного корня x из вещественного числа y. Примечание. Вычисление квадратного корня можно осуществить методом последовательного приближения с... http://www.cyberforum.ru/cpp-beginners/thread174028.html
Ссылки C++
Hi all Нельзя возвращать ссылку, если возвращаемое значение является локальной переменоой как здесь, потому что локальные переменные уничтожаются после выхода из функции Код: Fraction&...
return *char C++
если функция дожна возвращать строку... как это сделать? я написала так: char* GetString(char *filename) { FILE *f1; char str; f1=fopen(filename,"r"); if (f1!=0) fgets(str,100,f1);...
C++ Перевод из 10 в 2 систему через маску http://www.cyberforum.ru/cpp-beginners/thread173993.html
Здравствуйте! Пожалуйста помогите написать программу для перевода чисел из 10 в 2 системы счисления через маску Написать программу на языке C++, читающую со стандартного ввода 4 деся- тичных...
C++ Переход на классы Эмн... Вот тут возникла такая ситуация... Есть задание и код (написанный мною естессна), но его нужно переписать на классы, ибо сейчас он написал по-обычному(... Задание звучит так: При записи... подробнее

Показать сообщение отдельно
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.06.2011, 07:00
Цитата Сообщение от TheMachinist Посмотреть сообщение
Вообще то значение помещается в стек,а адрес в соответствующий регистр
С какого перепугу здесь будет передаваться значение? В стек помещается адрес, а значение по этому адресу читается. Регистр же используется только в оптимизированном вызове: чтоб поместить адрес в стек, его всё равно придётся загрузить в регистр, и в самой функции для доступа к адресу в стеке его также придётся загурзить в регистр, значит можно оба раза отвести для этих целей один и тот же регистр и убрать из объектного кода стековые операции.

Добавлено через 2 минуты
Цитата Сообщение от kravam Посмотреть сообщение
Ну и у нас ещё не научились параметры через регистры передавать (разве что параметры api-функций в Windows для 64-разрядных регистров, но, понятно, речь не о них сейчас)
Передача праметра чрез регистры придумана ещё на ассемблере, во времена спектрумов уже существовала, а на самих спектрумах, на сколько мне известно, была основной.

Добавлено через 1 минуту
Цитата Сообщение от kravam Посмотреть сообщение
И вдруг "a" в последней строчке означает АДРЕС a ? Пойду переваривать.
C++
1
2
int a;
a=2;// Как ты себе представляешь приваивание двух предыдущему значению a?
Добавлено через 5 минут
Цитата Сообщение от kravam Посмотреть сообщение
А вот тут получается, надо класть адрес 98-ми, которого просто нет- вот и сижу и ничё не понимаю- как так?), ибо 98 это 98 а не перменная a, b или c, спасибо
Именно поэтому такой вызов и запрещён. Кстати, как вообще концептуально решить применение константы в качестве изменяемого параметра?

Добавлено через 7 минут
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ссылки по эффективности ничем от указателей не отличаются, для машины разницы между ссылкой и указателем нет, это сущность лишь языка.
эффективность указателя может снижатья кучей проверок вроде
C++
1
if (p!=NULL)
или
C++
1
if (p)
, при использовании же ссылок такие проверки не требуются именно из-за того, что ссылка пустой быть не может.

Добавлено через 1 минуту
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Ссылки намного надёжнее указателей.
С какой стати?

Добавлено через 1 минуту
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
А как же безопасность кода? Ссылки намного надёжнее указателей. Хотя на низком уровне это одно и то же.
C++
1
2
3
4
5
int a;
int &b=a;
int *p=&b;
delete p;
b=2;
Добавлено через 1 минуту
Цитата Сообщение от kravam Посмотреть сообщение
Я правильно понял, что функции нельзя передать АДРЕС на объект с помощью указателей
С помощью указателя только адрес и передаётся.

Добавлено через 54 секунды
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
А отследить такие указатели очень сложно.
Просто до полного безобразия.

Добавлено через 1 минуту
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
ли каким-то образом код у тебя сработает, то это просто случайность. Передача нулевого указателя дело очень ненадёжное. А отследить такие указатели очень сложно.
Ссылка нулевой быть не может.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <math.h>
using namespace std;
 
class A
{
public:
        void Show()
        {
                std::cout << "Show\n";
        }
};
 
void f1 (A & a)
{
        a.Show();
}
 
void f2 (A * a)
{
        a->Show();
}
 
int main()
{
  A * c = NULL;
  f1 (*c);
  f2 (c);
  return 0;
}
Добавлено через 7 минут
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
я сразу вижу, что внутри f объект a скорее всего будет модифицироватся. В случае же ссылкой, пока я не посмотрю на объявление функции, я такой вывод сделать не смогу.
Если тебе ни о чём не говорит имя функции, то по синтаксису вызова ты поёмёшь только сам факт моджификации, но не как именно изменяемый параметр модифицируется, что как раз и ведёт к ошибкам и затрудняет отладку. Причём, даже если параметр предаётся по значению, но имя функции не понятно, то беда будет та же. Хорошо, путь параметры не меняются, тогда функция возвращает значение, присваиваемое переменной, или даже обращается к глобальным данным, но ты не понимаешь, как именно меняется значение переменной слева от опреатора присваивания. Если же имя функции понятно, то говорит о её назначении позовляет сделать вывод не только о факте изменения парметров, но и о том, как именно они меняются.

Добавлено через 1 минуту
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
В одной книге прочитал, что указатели в C++ надо использовать только для динамического выделения памяти.
Согласен, но не совсем. Указатели надо использовать только для динамического выделения памяти и передачи параметров-массивов.

Добавлено через 2 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
т.к. проверить указатель на ноль труда не составляет.
Но занимает процессорное время, а если полезеных операций на одну проверку будет приходиться мало, то прога будет тормозить на проверках.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru