Что означает этот синтаксис C ++ и почему он работает?

Я просматривал исходный код OpenDE и натолкнулся на странное использование синтаксиса оператора индексации массива '[]' в классе. Вот упрощенный пример, демонстрирующий синтаксис:

#include <iostream>

class Point
{
public:
    Point() : x(2.8), y(4.2), z(9.5) {}

    operator const float *() const
    {
        return &x;
    }

private:
    float x, y, z;
};

int main()
{
    Point p;
    std::cout << "x: " << p[0] << '\n'
              << "y: " << p[1] << '\n'
              << "z: " << p[2];
}

Вывод:

x: 2.8
y: 4.2
z: 9.5

Что здесь происходит? Почему этот синтаксис работает? Класс Point не содержит перегруженного оператора [] , и здесь этот код пытается выполнить автоматическое преобразование, чтобы где-то плавать.

Я никогда раньше не видел такого использования - он определенно выглядит необычно и удивительно, мягко говоря. Джон Смит, john.smith@hotmail.com Нэнси, Смит, nancy.smith@gmail.com Джейн, Доу, jane.doe@aol.com Джон Доу, john.doe@yahoo.comкак получить электронную почту ...

Например, из следующего файла:

Name,Surname,E-mail
John,Smith,john.smith@hotmail.com
Nancy,Smith,nancy.smith@gmail.com
Jane,Doe,jane.doe@aol.com
John,Doe,john.doe@yahoo.com

как получить адрес электронной почты Джона Доу?

Сейчас я использую следующий код, но могу указать только Теперь одно ключевое поле:


val src = Source.fromFile(file)
val iter = src.getLines().drop(1).map(_.split(","))
var quote = ""
iter.find( _(1) == "Doe"  ) foreach (a => println(a(2)))
src.close()

Я пытался написать «iter.find (_ (0) ==« Джон »&& _ (1) ==« Доу »)», но это вызывает ошибку, сообщающую, что только один параметр ожидается (включение условия в лишнюю пару скобок не помогает).

5
задан Ivan 3 September 2010 в 02:47
поделиться