Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “operator”关键字的这种用法是什么意思?_C++ - Fatal编程技术网

C++ “operator”关键字的这种用法是什么意思?

C++ “operator”关键字的这种用法是什么意思?,c++,C++,我在上找到了以下代码(我正在查找explicit关键字的含义) 在结构定义的第三行有一行: 运算符int()常量{return 0;} 我不知道那句台词是什么意思。哪个运算符被重载,是int吗 我试图自己解决这个问题,但我还是摸不着头脑。这是一个用户定义的转换运算符 struct X{ //隐式转换 运算符int()常量{return 7;} //显式转换 显式运算符int*()常量{return nullptr;} //错误:转换类型id中不允许使用数组运算符 //运算符int(*)[3](

我在上找到了以下代码(我正在查找
explicit
关键字的含义)

在结构定义的第三行有一行:
运算符int()常量{return 0;}

我不知道那句台词是什么意思。哪个运算符被重载,是int吗


我试图自己解决这个问题,但我还是摸不着头脑。

这是一个用户定义的转换运算符

struct X{
//隐式转换
运算符int()常量{return 7;}
//显式转换
显式运算符int*()常量{return nullptr;}
//错误:转换类型id中不允许使用数组运算符
//运算符int(*)[3]()常量{return nullptr;}
使用arr_t=int[3];
运算符arr_t*()const{return nullptr;}//如果通过typedef完成,则为OK
//运算符arr\u t()const;//错误:在任何情况下都不允许转换为数组
};
int main()
{
X;
int n=static_cast(x);//确定:将n设置为7
int m=x;//确定:将m设置为7
int*p=static_cast(x);//确定:将p设置为null
//int*q=x;//错误:没有隐式转换
int(*pa)[3]=x;//确定
}

在你发布的链接中,你可以看到
操作员类型(2)
,如果你按照第二个链接进行操作,你可以访问。检查@FelixKling,不确定我是怎么错过的。谢谢
struct A
{
    A(int) {} // converting constructor
    A(int, int) {} // converting constructor (C++11)
    operator int() const { return 0; }
};
struct X {
    //implicit conversion
    operator int() const { return 7; }

    // explicit conversion
    explicit operator int*() const { return nullptr; }

//   Error: array operator not allowed in conversion-type-id
//   operator int(*)[3]() const { return nullptr; }
    using arr_t = int[3];
    operator arr_t*() const { return nullptr; } // OK if done through typedef
//  operator arr_t () const; // Error: conversion to array not allowed in any case
};

int main()
{
    X x;

    int n = static_cast<int>(x);   // OK: sets n to 7
    int m = x;                     // OK: sets m to 7

    int* p = static_cast<int*>(x);  // OK: sets p to null
//  int* q = x; // Error: no implicit conversion

    int (*pa)[3] = x;  // OK
}