慕后森
没有区别; 根据标准(第5.2.3节):一个简单类型说明符(7.1.5)后跟一个带括号的表达式列表,可在给定表达式列表的情况下构造指定类型的值。如果表达式列表是单个表达式,则类型转换表达式(在定义上以及含义上)与相应的强制转换表达式(5.4)等效。由于问题指定了type(value)和之间的差异(type)value,因此绝对没有差异。当且仅当您要处理用逗号分隔的值列表时,才可以有所不同。在这种情况下:如果表达式列表指定了多个值,则该类型应为带有适当声明的构造函数的类(8.5、12.1),并且表达式T(x1,x2,...)等效于声明T t (x1,x2,...); 对于某些发明的临时变量t,结果是t的值作为右值。正如Troubadour指出的那样,存在某些类型的名称,而该类型type(value)根本不会为其编译。例如:char *a = (char *)string;将编译,但是:char *a = char *(string);将不会。但是,具有不同名称的相同类型(例如,使用创建的typedef)可以起作用:typedef char *char_ptr;char *a = char_ptr(string);