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
}