условный оператор может вернуть ссылку?

Я наткнулся на строку кода и никогда не думал, что она может работать хорошо. Я думал, что условный оператор возвращает значение и не работает со ссылкой.

Некоторый псевдокод:

#include <iostream>

using namespace std;

class A {
public:
A(int input) : v(input) {};
void print() const { cout << "print: " << v  << " @ " << this << endl; }
int v;
private:
//A A(const A&);
//A operator=(const A&);
};

class C {
public:
C(int in1, int in2): a(in1), b(in2) {}
const A& getA() { return a;}
const A& getB() { return b;}
A a;
A b;
};

int main() {
bool test = false;
C c(1,2);
cout << "A @ " << &(c.getA()) << endl;
cout << "B @ " << &(c.getB()) << endl;

(test ? c.getA() : c.getB()).print();  // its working
}

Может кто-нибудь объяснить? Спасибо.

4

Решение

Ваше предположение об условном операторе неверно. Тип выражения любой тип выражения c.getA() а также c.getB() иметь, если они имеют одинаковый тип, и если они обозначают lvalues, то то же самое делает и все выражение. (Точные правила приведены в §5.16 стандарта C ++.)

Вы даже можете сделать это:

(condition? a: b) = value;

условно установить либо a или же b в value, Обратите внимание, что это специфично для C ++; в C условный оператор не обозначает lvalue.

10

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector