Литералы
Для классов нельзя определить литеральные значения, подобному тому как 1.2 и 12e3 являются литералами типа double. Однако, для интерпретации значений классов могут использоваться вместо функций-членов литералы основных типов. Общим средством для построения таких значений служат конструкторы с единственным параметром. Если конструктор достаточно простой и реализуется подстановкой, вполне разумно представлять его вызов как литерал. Например, с учетом описания класса complex в <complex.h> в выражении zz1*3+zz2*complex(1,2) произойдет два вызова функций, а не пять. Две операции * приведут к вызову функции, а операция + и вызовы конструктора для построения complex(3) и complex(1,2) будут реализованы подстановкой.