第一件事:
$ 12.3.1/1 - “构造函数声明 无功能符 明确规定了从 转换的类型它的参数为其类的 类型,这样的构造函数 被称为转换构造函数。“
在你的榜样,INT是用户定义的类,它具有从“诠释”一个转换构造函数。
因此下面的代码是公形成:
INT i(1024); // direct initialization syntax
这意味着可以从一个整数得到一个INT对象。但是,如果INT对象必须被转换回整数,那么它会做什么?及物?
可以说,类INT可以提供一个成员函数返回封装的整数成员
int x = i.geta();
然而,这还不是很直观的,而不是一个标准化的方法。当涉及内置类型在这种情况下如何工作时,它也不是很直观。
int z = 0;
int y1 = z; // copy initialization or
int y2(z); // direct initialization
double d = (int)z; // explicit cast
THEREFOR标准允许这样的标准化和转换用户定义类型的直观性说:
$ 12.3/2 - “具有带 名称没有参数的 类X的成员函数形式的[...]
操作者转换型-ID
[ ...]指定从X转换为 conversion-type-id指定的 类型。这些功能是 称为转换功能。没有返回 类型可以指定。如果转换函数是成员函数,则转换函数 (8.3.5)的类型为“取不 参数返回 转换类型id”的函数。
这使得以下所有良好和保持和谐的方式内置工种是
int y1 = i; // copy initialization or
int y2(i); // direct initialization
double d = (int)i; // explicit cast
什么大胆的代码?否则,它基本上是'int'的一个包装,转换为'int'和运算符'++'。 – 2010-09-28 16:22:49
查看原文的来源,'operator int()'应该是粗体代码。 – 2010-09-28 16:29:34
如果可以的话,我会诚实地投票重新打开这个。原始问题的格式不佳,但有一段代码清晰粗体。稍后的编辑(不是由OP)是使代码变得粗体并因此使问题看起来不连贯的原因。 – eldarerathis 2010-09-28 16:31:42