Почему константа для неявного преобразования?

После подробного прочтения ISO / IEC 14882, Язык программирования - C ++ я все еще не уверен, зачем нужен const для неявного преобразования в пользовательский тип с конструктором с одним аргументом, как показано ниже

#include 

class X {
public:
   X( int value ) {
      printf("constructor initialized with %i",value);
   }
}

void implicit_conversion_func( const X& value ) {
   //produces "constructor initialized with 99"
}

int main (int argc, char * const argv[]) {
   implicit_conversion_func(99);
}



Начиная с раздела 4, строка 3

Выражение e может быть неявно преобразовано в тип T тогда и только тогда, когда объявление T t = e ; правильно сформирована для некоторой придуманной временной переменной t (8.5). Некоторые языковые конструкции требуют, чтобы выражение было преобразовано в логическое значение. Выражение e, появляющееся в таком контексте, считается контекстно преобразованным в bool и является правильно сформированным тогда и только тогда, когда объявление bool t (e); правильно сформирована для некоторой придуманной временной переменной t (8.5). Эффект от любого неявного преобразования такой же, как при выполнении объявления и инициализации с последующим использованием временной переменной в качестве результата преобразования. Результатом является lvalue, если T является ссылочным типом lvalue (8.3.2), и rvalue в противном случае. Выражение e используется как lvalue тогда и только тогда, когда инициализация использует его как lvalue.

После этого я нашел раздел об инициализаторах, связанных с определяемыми пользователем типами в 8.5, строка 6

Если программа вызывает инициализация по умолчанию объекта типа T с определением const, T должен быть типом класса с предоставленным пользователем конструктором по умолчанию.

  1. Может ли кто-нибудь пролить свет на то, какое влияние const оказывает на неявные преобразования?
  2. Делает ли использование const преобразование «однозначным» согласно 12.3, строка 2?
  3. ] Влияет ли const каким-либо образом на lvalue по сравнению с rvalue, о котором говорилось в разделе 4?

12
задан curiousguy 23 December 2011 в 06:20
поделиться