Ф-ции присваиваем значение.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xGOR, 18 Aug 2008.

  1. xGOR

    xGOR Elder - Старейшина

    Joined:
    25 Nov 2007
    Messages:
    83
    Likes Received:
    38
    Reputations:
    -5
    Привет всем. Вот недавно вкуривал новое СадоМазо в С++. Вкурил то, что ф-ции присвоил значение. Перейду сразу к сорцу =)

    Code:
    #include <iostream>
    using namespace std;
    
    int x;
    int& func(){
    return x;
    }
    
    void main(){
    int f=5;
    x=4;
    cout<<"x="<<x<<"\nfunc()="<<func();
    func()=f;
    cout<<"\n\nx="<<x<<"\nfunc()="<<func()<<endl;
    }
    
    Смысл здесь такой: если ф-ция возвращает значения ввиде ссылки, то компилятор интерпритирует её как переменную.

    Если ктото ещё подобные вещи знает, отписывайте ;)
     
    #1 xGOR, 18 Aug 2008
    Last edited: 18 Aug 2008
    1 person likes this.
  2. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    как, я понял, а я всегда плохо понимаю, ты хочеш, чтобы функция вернула тебе значение x? Ты хочешь, чтобы значение x изменялось, функцией на значение f? Тогда всё правильно.
     
    #2 ronald, 21 Aug 2008
    Last edited: 21 Aug 2008
  3. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    :) Тэк-с, мне не давал покоя ммой корявый пост, разъясняю подробно:
    func() возвращает значение x,
    следовательно func=x,
    ты передаешь функции значение f(было бы правильнее) func(x), на мой взгляд,
    тогда функция изменяет значение x на значение f и выдаёт. Исправьте меня если ошибся, я ещё малёк в с++ :)
    P.S:если помог, то плюсы в студию))
     
  4. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    & убери)))
     
  5. Mystic.asm

    Mystic.asm New Member

    Joined:
    20 Aug 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Нет, здесь просто используется ссылка на int&. Ничего особенного в этом коде я не вижу, в стандартных классах это сплошь и рядом (std::vector<T>::at(size_t), std::vector<T>::eek:perator[](size_t)).
    Просто чтобы понять это, можно интерпретировать ссылку как саморазыменовывающийся указатель, никакого садомазо, все очевидно.
     
  6. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    ок, недопонел. Eee7-смерть клавиатуры и монитора, сидеть максимум десять минут и идти блевать)))))
     
  7. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    Простое жонглирование именем переменной и адресом. На практике может быть источником весьма неприятных ошибок.

    return *this в С++ очень близок по функциональности, когда используется в &operator = или же &operator +

    По сути автор и реализовал тот самый operator=(int f) только в извращенном виде.
     
  8. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    Это был один из моих первых опытов на С++ (присвоение переменной значение) вообще никому нах не нужна эта вещь