Возможные дубликаты:
В чем разница между оператором dot (.) и → в С++?
Что такое оператор-стрелка (- > ) синоним в С++?
В заголовке указано все.
Что означает → в С++?
Возможные дубликаты:
В чем разница между оператором dot (.) и → в С++?
Что такое оператор-стрелка (- > ) синоним в С++?
В заголовке указано все.
Что означает → в С++?
Он для доступа к функции-члену или переменной-члену объекта через указатель, в отличие от обычной переменной или ссылки.
Например: с регулярной переменной или ссылкой вы используете оператор .
для доступа к функциям-членам или переменным-членам.
std::string s = "abc";
std::cout << s.length() << std::endl;
Но если вы работаете с указателем, вам нужно использовать оператор ->
:
std::string* s = new std::string("abc");
std::cout << s->length() << std::endl;
Он также может быть перегружен для выполнения определенной функции для определенного типа объекта. Смарт-указатели, такие как shared_ptr
и unique_ptr
, а также итераторы контейнеров STL, перегружают этот оператор, чтобы имитировать семантику родного указателя.
Например:
std::map<int, int>::iterator it = mymap.begin(), end = mymap.end();
for (; it != end; ++it)
std::cout << it->first << std::endl;
a->b
означает (*a).b
.
Если a
является указателем, a->b
является членом b
, из которого a
указывает на.
a
также может быть указателем вроде объекта (например, vector<bool>
stub) переопределить операторы.
(если вы не знаете, что такое указатель, у вас есть другой вопрос)
Введение для возвращаемого типа локального лямбда-выражения:
std::vector<MyType> seq;
// fill with instances...
std::sort(seq.begin(), seq.end(),
[] (const MyType& a, const MyType& b) -> bool {
return a.Content < b.Content;
});
вводящий возвращаемый тип функции в сочетании повторно изобретенного auto
:
struct MyType {
// declares a member function returning std::string
auto foo(int) -> std::string;
};
x- > y может означать 2 вещи. Если x является указателем, то это означает элемент y объекта, на который указывает x. Если x является объектом с оператором → () перегруженным, то это означает x.operator → ().
член b объекта, на который указывает а- > б
Оператор ->
, который применяется исключительно для указателей, необходим для получения указанного поля или метода объекта, на который указывает указатель. (это относится также к structs
только для их полей)
Если у вас есть переменная ptr
, объявленная как указатель, вы можете представить ее как (*ptr).field
.
Сторона node, которую я добавляю только для того, чтобы сделать педантичных людей счастливыми: КАК ПОЧТИ КАЖДЫЙ ОПЕРАТОР вы можете определить другую семантику оператора, перегрузив его для своих классов.
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators
a -> b
является членом b объекта, на который указывает