Где стандарт определяет порядок предпочтения для привязки значений к ссылкам?

Как это объясняется Вот, Значения разных категорий привязываются к ссылкам разных видов в соответствии со следующим порядком предпочтения:

struct s {};

void f (      s&);  // #1
void f (const s&);  // #2
void f (      s&&); // #3
void f (const s&&); // #4

const s g ();
s x;
const s cx;

f (s ()); // rvalue        #3, #4, #2
f (g ()); // const rvalue  #4, #2
f (x);    // lvalue        #1, #2
f (cx);   // const lvalue  #2

Где в стандарте описан этот порядок предпочтений?

0

Решение

[Over.ics.rank] / 3
— (3.1) Стандартная последовательность преобразования S1 является лучшей последовательностью преобразования, чем стандартная последовательность преобразования S2 если

(3.1.3) — S1 а также S2 являются ссылочными привязками (8.5.3), и ни одна из них не ссылается на неявный параметр объекта нестатической функции-члена, объявленной без квалификатора ref, и S1 связывает ссылку Rvalue с Rvalue и S2 связывает ссылку lvalue.

(3.1.6) — S1 а также S2 являются привязками ссылок (8.5.3), и типы, на которые ссылаются ссылки, относятся к одному и тому же типу, за исключением cv-квалификаторов верхнего уровня, и типа, к которому ссылка инициализируется S2 ссылка более квалифицирована по cv, чем тип, к которому ссылка инициализирована S1 относится.

Согласно этим правилам, функция, принимающая ссылку на rvalue, предпочтительнее, чем функция, принимающая ссылку на lvalue, а затем функция, принимающая неконстантную ссылку, предпочтительнее, чем функция, принимающая const. Разумеется, учитывая только жизнеспособные перегрузки.

2

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

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

По вопросам рекламы [email protected]