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

Ссылки и указатели - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построение UML http://www.cyberforum.ru/cpp-beginners/thread250365.html
Можно ли создать диаграмму зависимостей UML из существующего проекта VS 2005?
C++ написать программу если можно с объяснением!!!!!!!! http://www.cyberforum.ru/cpp-beginners/thread250357.html
C++ класс эллипс
ПОМОГИТЕ ПОЖАЛУЙСТА, начала изучать с++ столкнулась с такой вот задачей...... Определить класс эллипс, продемонстрировать использование класса. Члены класса: переменные, необходимые для того, чтобы иметь возможность пользоваться стандартными функциями рисования. Обязательны функции-члены класса: нарисовать, стереть, передвинуть эллипс, изменить радиусы эллипса. может у кого есть примеры для...
C++ Сложение, вычитание, умножение
Доброго времени суток! Помогите с задачей: Написать функцию, которая складывает, вычитает или умножает два целых числа и возвращает результат (операнды и знак операции +, – или * — параметры функции). Заранее Спасибо! PS есть наработки, но чёт не так, выдаёт ошибки: num1.cpp #include<iostream>
C++ Преобразование массива с использованием функции http://www.cyberforum.ru/cpp-beginners/thread250350.html
На языке С написать с помощью функции программу. Задание: Дана матрица А и вектор B. Из сумм элементов строк матрицы сформировать вектор C. Если минимальный элемент вектора C кратен минимальному элементу вектора B, то из положительных элементов матрицы А сформировать вектор D и упорядочить его по возрастанию. Иначе матрицу А упорядочить по возрастанию. Заранее благодарен...
C++ указатель(?) на массив ситуация: мне нужно, чтобы в main был определён двумерный массив, а класс мог бы его использовать: class map { unsigned short int *field; bool isVisiable; public: map(unsigned short int ???); void show (); void hide (); подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17633 / 5857 / 377
Регистрация: 30.03.2009
Сообщений: 16,153
Записей в блоге: 26
19.06.2011, 23:07
Цитата Сообщение от Evg Посмотреть сообщение
2. При наличии модификатора const перед ссылкой можно быть железно уверенным в том, что ни при каких обстоятельствах значение передаваемого аргумента не изменится. Если же мы работаем с указателем, то в результате ошибки программиста значение может измениться, что приводит к очень трудноуловимым ошибкам, которые с виду выглядят как ошибки компилятора, потому что компилятор доверился модификатору const. Реально это ошибка программиста

C
1
2
3
4
5
6
7
8
9
/* С виду функция выглядит так, что по указателю значения изменяться
 * не должны. Компилятор в точке вызова функции может заложиться на это свойство */
void (const int *p)
{
  /* Но средствами языка мы вполне можем обойти признак const и сделать
   * запись по указателю. */
  int *pp = (int*) p;
  *pp = 0;
}
Добрые люди подсказали, что я не прав. Над ссылками можно проводить преобразование типа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
void func (const int &p)
{
    int &ppp=(int&) p;
    ppp=100;
}
 
int main (void)
{
    int p = 10;
    std::cout << p << std::endl;
    func (p);
    std::cout << p << std::endl;
    return 0;
}
напечатает

Код
10
100
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru