После обширного чтения ISO/IEC 14882, Programming language – C++ я все еще не уверены, почему const
необходим для неявного преобразования в определяемого пользователем типа с помощью одного аргумента конструктора, как следующийПочему const для неявного преобразования?
#include <iostream>
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
Если программа вызывает для инициализации по умолчанию объекта константного-квалифицирован типа Т, Т должен быть типом класса с предоставленным пользователем конструктором по умолчанию.
Наконец я закончил в строке 2 12,3 об определенных пользователем преобразований в котором говорится
преобразования, определенные пользователем, применяются только там, где они являются однозначными (10.2, 12.3.2).
Излишне говорить, что 10.2 и 12.3.2 не отвечали на мой вопрос.
- Может кто-нибудь пролить некоторый свет на то, что эффект
const
имеет на неявные преобразования? - Использует ли
const
преобразование «однозначно» по 12,3 строки 2? const
как-то влияет на значение lvalue vs. rvalue в разделе 4?
Не любите ли вы C++? – 2010-10-09 04:02:15