我想知道是否有人知道转换/类型转换运算符的限制是什么?
因此,例如,我可以使用以下覆盖运算符:
class Test {
operator int() { return 0; };
operator int*() { return nullptr; };
}
对于常规函数,我还可以有一个指向数组类型的指针。例如
int (*MyFunc())[4] { return nullptr; };
但是,我不知道如何为转换运算符做同样的事情(或者这样做是否合法)。我尝试了几种不同的变体和 VS2010,但都没有用。 (如:)
operator int (*())[4] { return nullptr; };
operator int(*)[4]() { return nullptr; };
我不确定这是否是 VS2010 中的限制,或者是否对可在转换运算符中使用的类型有一般限制。我试着在网上寻找标准,但没有成功。有人知道吗?在有人问“你为什么要这样做”之前,它是针对自动生成的代码的。虽然我不希望获得指向数组输入的指针,但如果它在 C++ 中是合法的,我希望能够生成代码。
最佳答案
你应该主要在硬构造中使用 typedef
,而且你的语法错误,
运算符类型 () {}
虽然我会使用 typedef
typedef int (*foo())[4];
typedef int(*bar)[4];
使用类型定义
operator foo() { return nullptr; }
//这里你试图将 nullptr
转换为一个 “函数”,它返回指向 4 个 int
数组的指针s ,这显然是错误的。
运算符 bar() { return nullptr;
//你的第二次转换是有效的,因为你正在将 nullptr
转换为 pointer 到 4 int
s
关于c++ - 类型转换运算符中的类型是否有任何限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147650/