Это должно быть неоднозначно или нет? (неявное приведение)

 struct A 
 {
     A(const A& src);
     A(const char* src);
 };
 struct B 
 {
     operator A();
     operator char*();
 };
 void test()  
 {
     B v;
     A s(v);
 }

EDG / Comeau и MSVC разрешают код, в то время как GCC 4.4.4, CLANG и BCC отклонить его как неоднозначный.

Член комитета C ++ ответил так (первоначально):

Это не двусмысленно; A (const A &) конструктор лучше, чем A (const char *) конструктор. Константа A & параметр привязывается непосредственно к результату функции преобразования, поэтому последовательность преобразования считается быть определенным пользователем преобразованием, за которым следует путем преобразования личности (13.3.3.1.4п1). Константа char * параметр - определяемое пользователем преобразование с последующей квалификацией преобразование, так что это хуже.

Затем он продолжил это.

На самом деле, я был неправ. Пока это правда, что второе преобразование последовательность в определяемом пользователем преобразовании последовательность - тай-брейк, ищу больше близко к 13.3.3.2p3, предпоследний маркер, показывает, что этот тай-брейк применяется только в том случае, если два последовательности содержат одинаковые определяемая пользователем последовательность преобразования, и в данном примере это не так. Поскольку преобразование одного конструктора последовательность использует B :: оператор A () и в других случаях используется b :: operator char * (), между ними нет тай-брейка определяемые пользователем последовательности преобразования и они неоднозначны.

У меня такой вопрос.

13.3.3.2 p3 утверждает, что,

Две неявные последовательности преобразования одинаковые формы неотличимы последовательности преобразования, если одна из применяются следующие правила.

Насколько я понимаю, ключевые слова являются «одним из следующих правил». Это не означает, что маркер, в котором указывается "та же последовательность преобразования" отменяет все вышеперечисленные. Я бы подумал "ранг S1 лучше Какое время загрузки? Я использую сетевую панель Firebug, чтобы узнать время отклика. В строке состояния сетевой панели сводка отображается следующим образом: 10 запросов 90 КБ ...

Я использую сетевую панель Firebug, чтобы увидеть время ответа. В строке состояния сетевой панели сводка отображается следующим образом:

10 запросов 90 КБ 10,22 с (загрузка 6,57 с)

Что означает время загрузки? Означает ли это, что после того, как контент был получен с сервера, потребовалось еще 6,57 секунды, чтобы страница стала пригодной для использования (то есть до завершения события onready)?

Примечание: сайт, который я тестирую, ОЧЕНЬ загружен Qooxdoo компоненты и множество JavaScript.

11
задан 24 November 2010 в 05:38
поделиться