Const Int& Vs Int В Качестве Параметра

Тема в разделе "Общие вопросы по С и С++", создана пользователем qqwertty, 8 фев 2012.

  1. qqwertty

    qqwertty Гость

    Собсна и весь вопрос. Есть ли разница между:

    void foo(const int& i);
    void foo(int i);

    Именно для int, для классов понятно, что есть
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
  3. qqwertty

    qqwertty Гость

    ОК и в чем?

    з,Ы, Вас видимо очень прикалывает по два раза отвечать...
     
  4. artkl

    artkl Гость

    Во втором случае вы передаете значение переменной, в первом ссылку на эту переменную, при этом модифицировать это значение функция не сможет (const). Разница очевидна.
     
  5. qqwertty

    qqwertty Гость

    Ну так и????

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

    То что программист захочет потом через 10 лет в foo написать где-нибудь i++; и программа сломается, давайте не учитывать. Это уже бред.
     
  6. artkl

    artkl Гость

    1. foo(int i); // Передача значения типа int в функцию
    2. foo(int& i); // Передача ссылки (адрес переменной) на значение переменной типа int
    3. foo(const int& i); // Передача ссылки (адрес переменной) на константное значение переменной типа int

    int ii = 0;
    foo(ii);

    Если объявлена 1 функция, то создается копия переменной ii и передается в функцию
    Если объявлена 2 и 3 функция, то передается лишь ссылка на переменную ii, в следствии чего, функция foo и вызывающая программа работают с одной переменной.

    Функция foo сможет изменять значение переменной i, если объявлена как 1 или 2 функция

    Для наглядности, по экспериментируй с этим кодом:
    Код (C++):
    #include <iostream>

    //void foo(int i) { i = 3; }
    void foo(int& i) { i = 3; }

    int main()
    {
    int i = 0; 
    foo(i);

    std::cout << i;

    system("PAUSE");
    return 0;
    }
    Функции эквивалентные, но результат работы программы совершенно разный.
     
  7. qqwertty

    qqwertty Гость

    Ладно, видимо вы поддтекст моего вопроса не поняли... Моя вина.

    Как лучше писать:
    void foo(const int& i);
    или
    void foo(int i);

    без потерь производительности. Или мб "хороший стиль" предполагат что-то одно?
     
  8. artkl

    artkl Гость

    Как лучше? Ответ зависит от того, что должна делать функция foo с этой переменной.

    В случае, если функции нужно только значение переменной и она не собирается его менять, то, естественно, необходимо объявлять ее как foo(const int& i). Почему? Читай выше.
     
  9. qqwertty

    qqwertty Гость

    А чего она может с ней делать???? Это же параметр. Использовала и выброила. Я же говорю i++ не рассматриваем.

    Например такой код

    Код (C++):
    class A
    {
    /*...*/
    void foo(int i) {a=i;} // or const int&
    private:
    int a;
    };
     
  10. artkl

    artkl Гость

    Если функция работает без побочных эффектов, то она принимает копии переменных, иначе ссылки на них.

    void foo(int i) {a = i; } <=> void foo(const int& i) {a = i;}
    В первом случае произойдет создание копии переменной при вызове, во втором, копия будет создана после неявного приведения типа: const int& -> int. Я придерживаюсь второго варианта, потому что он наиболее точней описывает то, что будет происходить с переменной, после передачи ее в функцию, а именно: значение переменной i не будет изменено.
     
Загрузка...
Похожие Темы - Const Int& Int
  1. Nekros
    Ответов:
    1
    Просмотров:
    1.184

Поделиться этой страницей