ank*_*kit 33 c++ terminology conversion-operator
以下是什么是"operator int"函数?它有什么作用?
class INT
{
int a;
public:
INT(int ix = 0)
{
a = ix;
}
/* Starting here: */
operator int()
{
return a;
}
/* End */
INT operator ++(int)
{
return a++;
}
};
Run Code Online (Sandbox Code Playgroud)
Joh*_*ing 29
粗体代码是转换运算符.(AKA 演员)
它为您提供了一种从自定义INT类型转换为另一种类型(在本例中int)的方法,而无需显式调用特殊转换函数.
例如,使用convert运算符,此代码将编译:
INT i(1234);
int i_2 = i; // this will implicitly call INT::operator int()
Run Code Online (Sandbox Code Playgroud)
如果没有转换运算符,上面的代码将无法编译,您将不得不执行其他操作从a INT到a int,例如:
INT i(1234);
int i_2 = i.a; // this wont compile because a is private
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 16
operator int()是一个转换运算符,它允许使用此类来代替int.如果在int期望(或其他数字类型)的地方使用此类型的对象,则此代码将用于获取正确类型的值.
例如:
int i(1);
INT I(2); // Initialised with constructor; I.a == 2
i = I; // I is converted to an int using `operator int()`, returning 2.
Run Code Online (Sandbox Code Playgroud)
第一件事:
$12.3.1/1 - “在没有函数说明符的情况下声明的构造函数明确指定了从其参数类型到其类类型的转换。这样的构造函数称为转换构造函数。”
在您的示例中,INT 是一个用户定义的类,它具有来自“int”的转换构造函数。
因此,以下代码格式良好:
INT i(1024); // direct initialization syntax
Run Code Online (Sandbox Code Playgroud)
这意味着您可以从整数中获取 INT 对象。但是,如果必须将 INT 对象转换回整数,该怎么办?传递性?
可以说INT类可以提供一个成员函数返回封装的整数成员
int x = i.geta();
Run Code Online (Sandbox Code Playgroud)
然而,这不是很直观,也不是标准化的方法。此外,在这种情况下,内置类型的工作方式也不直观。
int z = 0;
int y1 = z; // copy initialization or
int y2(z); // direct initialization
double d = (int )z; // explicit cast
Run Code Online (Sandbox Code Playgroud)
因此,标准允许通过以下方式转换用户定义类型的标准化和直观性:
$12.3/2 - “X 类的成员函数,没有参数,名称为 [...]
运算符转换类型 ID
[...] 指定从 X 到由 conversion-type-id 指定的类型的转换。此类函数称为转换函数。不能指定返回类型。如果转换函数是成员函数,则转换函数(8.3.5)的类型为“不带参数返回conversion-type-id的函数”。
这使得所有的下列常见的形成和保持和谐与内建类型的工作方式是
int y1 = i; // copy initialization or
int y2(i); // direct initialization
double d = (int )i; // explicit cast
Run Code Online (Sandbox Code Playgroud)