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

Const-параметры в аргументах функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что быстрее? Обращение к элементу массива или к элементу структуры? http://www.cyberforum.ru/cpp-beginners/thread1498974.html
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на вызов функции do_nothing получилось примерно такое же. Оптимизация отключена. Верен ли вывод, что обращение к элементу массива, элементу структуры и вызов функции занимают одинаковое время? Использую MinGW 4.4 с Qt 4.7.4. #include <iostream> #include...
C++ Fstream в классах Проблема заключается в том, что я не могу использовать fsream в классе, ибо выдаёт ошибку. Код и текст ошибки ниже. Помогите пожалуйста (мб поможете и с самой задачей, условие ниже). Код весь в костылях))) /*-------------------------------------------------------------------*/ Условие задачи: Создать программу, которая будет добавлять/убирать/просматривать ваших друзей с текстового файла... http://www.cyberforum.ru/cpp-beginners/thread1498970.html
C++ Как работать с функцией SystemParametersInfo?
Чтобы установить обои рабочего стола. Пишу вот так: #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv) { if (SystemParametersInfo ( SPI_SETDESKWALLPAPER,
Ошибка при компилировании C++
Вот такая ошибка "Unhandled exception at 0x1027d340 (msvcr100d.dll) in 546456.exe: 0xC0000005: Access violation writing location 0xfdfdfdfd." Что делать?
C++ Вставка рисунка в RichEdit из файла,как реализовать? http://www.cyberforum.ru/cpp-beginners/thread1498901.html
И чтобы сохранялось в файл при RichEdit->Lines->SaveToFile("");
C++ Почему не возвращаются из функции min и max? #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; template <class T> int SortArr(T arr, int size) { int max, min; //поиск левого значения подробнее

Показать сообщение отдельно
hoggy
6534 / 2714 / 469
Регистрация: 15.11.2014
Сообщений: 5,993
Завершенные тесты: 1
14.07.2015, 12:33
Цитата Сообщение от Avazart Посмотреть сообщение
Где тут нужен запрет модификации?
нигде.

согласно граммар-конст, правило формулируется, как:
"все, что не должно быть изменено (не будет меняться), должно быть константами"

и это правило - универсально.
приняв за правило делать константами все,
что измениться не должно,
мы следуем эту стилю во всем.

Цитата Сообщение от Avazart Посмотреть сообщение
Излишеством, да и ф-ция не становится короче/лаконичнее от таких записей.
чушь.
кстати, конст не является излишеством.
например, в стародавние временя он помогал убогим компиляторам оптимизировать.

ваше "лаконично/короче" не имеет никакого отношения к дезориентации.
------------------------------------------------------------------------------------------------

на самом деле, вы далеко не первый, кто отсылал меня к Саттеру.
но ни вы, ни кто другой, так и не смогли ответить на этот вопрос.

а вот я могу.
хотите?

посмотрите внимательно, и скажите,
чем отличаются эти две функции?

C++
1
2
3
4
void foo(const int v)
{
    const auto d = v+1;
}
C++
1
2
3
4
void foo(int v)
{
    const auto d = v+1;
}
ответ:

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

и это - единственное отличие.
а полном смысле этого слова.

у этих функций одна и та же сигнатура.

правило звучит так:
"в сигнатуре функции квалификатор конст не учитывается для параметров по значению".

таким образом имеем:

C++
1
2
3
4
void foo(const int v) { const auto d = v+1; }
 
// error: redefinition of ‘void foo(int)’
void foo(int v) { const auto d = v+1; }

либо:

http://rextester.com/YOJVM30406

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
    
    
    std::cout <<"сигнатуры идентичны? (должно быть 1) " 
        << std::is_same< void(*)(int), void(*)(const int) >::value 
    <<std::endl;
}
соответственно, указателю на функцию можно присваивать адрес функции забивая болт на разницу в квалификаторах параметров.


однако сказать, что это как то может дезорентировать - по меньше мене глупо.

потому что:

1.
об этом нюансе языка вообще не каждый программист знает.
не каждый вообще когда нибудь с этим сталкивался воочию.
и об этом почему то не писал ваш любимый Саттер.
верно, вы ему наслово поверили?


2.
с таким же успехом можно сказать, что const в указателях дезорентирует
(новички часто путаются: справа/слева от звездочки).

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