奇怪的c ++运算符(运算符unsigned short())

zhi*_*fan 1 c++ operator-overloading

我遇到了一个奇怪的c ++运算符.

http://www.terralib.org/html/v410/classoracle_1_1occi_1_1_number.html#a0f2780081f0097af7530fe57a100b00d

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 ++标准可以说吗?

R S*_*ahu 6

该函数是用户定义的转换运算符.有关详细信息,请访问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没有带有表单名称的参数

...

[ 例如:

struct X {
    operator int();
  };

void f(X a) {
    int i = int(a);
    i = (int)a;
    i = a;
  }
Run Code Online (Sandbox Code Playgroud)

在所有三种情况下,赋值将由X :: operator int()转换.- 结束例子 ]