c++ - 类型转换运算符中的类型是否有任何限制?

标签 c++ operator-overloading

我想知道是否有人知道转换/类型转换运算符的限制是什么?

因此,例如,我可以使用以下覆盖运算符:

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 ints

关于c++ - 类型转换运算符中的类型是否有任何限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147650/

相关文章:

c++ - C++ 中的 typedef 和运算符重载

java - 重用代码 - Java

C++ 运算符使用友元函数重载。尝试添加多个对象失败

c++ - 是否可以在不必计算 A/B 的情况下有效地计算 A % B?

c++ - 带字符串的 RapidJson kArrayType

c++ - 何时真正使用访客模式

c++ - 无法在 C++ 中调用重载 << 运算符

c++ - 我不能直接在 C++ 中返回列表初始化吗?

c++ - 打印链表元素

c++ - 重载运算符问题 C++