zhi*_*fan 1 c++ operator-overloading
我遇到了一个奇怪的c ++运算符.
class Number ?
..
operator unsigned short () const;
};
Run Code Online (Sandbox Code Playgroud)
我将此运算符称为:a Number(..); unsigned short b = a.operator unsigned short();
这有效,但我无法理解它是如何工作的.
首先,此运算符没有返回值.秒,a.operator unsigned short()对我来说真的很奇怪.什么是更好的方式来称呼这个?
如果我打电话:unsigned short b = a; 操作员会被叫到吗?有什么c ++标准可以说吗?
该函数是用户定义的转换运算符.有关详细信息,请访问http://en.cppreference.com/w/cpp/language/cast_operator.
你说,
此运算符没有返回值.秒,
用户定义转换运算符的返回值是显式类型.在您的情况下,返回类型是unsigned short.
您询问:
什么是更好的方式来称呼这个?
您可以执行显式转换来调用该函数.
Number n;
unsigned short s = (unsigned short)v;
Run Code Online (Sandbox Code Playgroud)
当编译器需要转换时也会调用它.
void foo(unsigned short s) {}
Number n;
foo(n); // Number::operator unsigned short() is called to cast
// n to an unsigned short.
Run Code Online (Sandbox Code Playgroud)
您询问:
如果我打电话:
unsigned short b = a;运营商会被叫到吗?有什么c ++标准可以说吗?
是.调用用户定义的运算符函数.
以下是C++草案标准(N3337)的相关章节:
12.3.2转换功能
1类的成员函数,
X没有带有表单名称的参数...
[ 例如:
Run Code Online (Sandbox Code Playgroud)struct X { operator int(); }; void f(X a) { int i = int(a); i = (int)a; i = a; }在所有三种情况下,赋值将由X :: operator int()转换.- 结束例子 ]
| 归档时间: |
|
| 查看次数: |
1828 次 |
| 最近记录: |