2013-05-24 3 views
0

У меня есть пример замедления функтора как;Синтаксис определения функтора в C++?

#include <iostream> 

class myFunctorClass 
{ 
    public: 
     myFunctorClass (int x) : _x(x) {} 
     int operator() (int y) { return _x + y; } 
    private: 
     int _x; 
}; 

int main() 
{ 
    myFunctorClass addFive(5); 
    std::cout << addFive(6); 

    return 0; 
} 

Мои "Что" о линии только после общественности:. Я не понимаю синтаксис строки myFunctorClass (int x) : _x(x) {}. Что делает и что еще один пример использования такого правила синтаксиса?

+9

Это конструктор, получите [хорошую книгу] (http://tinyurl.com/so-cxxbooks). – Xeo

+1

И функтор не замедляется, поэтому «замещение функтора» не является очень значимым термином –

+0

Инициализирует частный член _x для значения, указанного при вызове конструктора. Таким образом, _x инициализируется до 5 или 6 в вашем случае даже до того, как конструктор действительно работает. – hetepeperfan

ответ

1

myFunctorClass (int x) : _x(x) {} является конструктором. Это функция, которая выполняется всякий раз, когда объект класса создается.

Часть : _x(x) является списком инициализации. Это означает, что он инициализирует элемент со значением (в этом случае значение x используется для инициализации _x) или инициализирует родительский класс.

Код будет в этом случае функционально равно

myFunctorClass (int x) { 
    _x = x; 
} 

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

+0

это просто для конструктора или может использоваться для других определений функций. – erogol

+0

@Erogol список инициализаторов предназначен только для конструкторов. Это не имело бы смысла нигде. – rubenvb

+0

Списки инициализации могут использоваться только в конструкторах. Как следует из названия, здесь просто _initialize_ членов или родителей в первый раз. Это особенно полезно для членов 'const', поскольку они не могут быть повторно назначены или родительских классов, которые сами принимают параметры конструктора. – Appleshell

0

Это просто определение конструктора myFunctorClass. Возможно, это всего лишь часть : _x(x), которая вас сбивает с толку. Будет ли myFunctorClass (int x) {} иметь для вас смысл? Часть : _x(x) представляет собой список инициализации членов и говорит, что элемент _x должен быть инициализирован значением аргумента x.

0

Это конструктор класса. Он инициализирует элементы данных (после :). И тело функции конструктора пусто.

0

Вы используете список член инициализации конструктора класса инициализировать ваш член _x к x, который был принят в качестве 5 конструктору в myFunctorClass addFive(5);

Смежные вопросы