GCC转换函数& operator int();怎么办?

时间:2017-01-31 09:55:34

标签: c++ reference type-conversion clang

使用g ++,这是一个法律声明:

class foo
{
  public:
    foo();
    &operator int();  // this fails with Clang   
};

这是我的真实代码的简化示例,看起来更像

template <class VAR_TYPE> class Foo : public Bar<VAR_TYPE>
{
  public:   
    Foo();
    // [...] more constructors here

    &operator const VAR_TYPE () const;  // this fails with Clang

    // [...] more stuff (a lot)
};

尝试使用Clang编译它会产生以下错误:

  

错误:无法在声明中指定返回类型的任何部分   转换功能;将完整类型放在&#39;运算符&#39;

之后

我发现GCC使用&这里的论据是被禁止的,因为它违反了语言定义12.3.2.1

  

[...]无法指定返回类型。如果转换函数是a   成员函数,转换函数的类型(8.3.5)是   “函数不带参数返回conversion-type-id”。 [...]

问题1。 GCC实施究竟做了什么?从我的测试来看,我怀疑它等同于operator int& ();,但如果我错了或者我错过了一些额外的功能,请纠正我。

问题2。 在我的(遗留)代码中,它实际上是&operator const VAR_TYPE() const;。鉴于我在问题1中的假设是正确的,这相当于operator const VAR_TYPE&() const;。什么可能是返回const引用而不是非引用副本的目的,并且可以某种方式利用它来对像数组/向量元素这样的底层数据结构进行写访问?

问题3。 语言定义这真的是非法的吗?引用的文本仅涉及返回类型。 &不是一种类型。它是一个词法元素,需要与普通的类型说明符组合才能成为一种类型。但我无法在语言定义中找到&的广泛解释。

0 个答案:

没有答案