相关疑难解决方法(0)

显式调用具有推导返回类型(自动)的转换运算符的正确语法是什么

我们在 C++ 中什么是运算符 auto的问题中遇到了语言实现之间奇怪的不一致.

在那里,显式调用具有推导返回类型 (auto) 的转换运算符。但似乎编译器不同意是否应该使用auto或推导类型GCC Clang调用它:

struct A
{
  operator auto() { return 0; }
};

int main()
{
   A a;
   a.operator auto(); // Clang and MSVC: OK,    GCC: ERROR
   a.operator int();  // Clang and MSVC: ERROR, GCC: OK
}
Run Code Online (Sandbox Code Playgroud)

哪种语言实现是正确的?这是否在标准中指定不足?

c++ language-lawyer

18
推荐指数
0
解决办法
261
查看次数

多种转换功能作为课堂上的“operator auto”

在下面的代码中

struct S {
    operator auto() { return 42; }
};
Run Code Online (Sandbox Code Playgroud)

operator auto等价于operator int因为实际类型是从文字中推导出来的,42而该类型是int. 如果我写42.5而不是42thenoperator auto将被解释operator double为显而易见的原因。但是当我同时使用两者时,所有三个主要编译器(gcc、clang、msvc)都出现编译器错误:

struct S {
    operator auto() { return 42; }
    operator auto() { return 42.5; }
};
Run Code Online (Sandbox Code Playgroud)

编译器之间的实际错误消息各不相同,但原因是相同的:“函数已经定义”。

我无法在标准中找到为什么operator auto不能在一个类中同时使用两者(具有不同的返回类型)。有人可以指出标准的条款,其中该组转换函数被认为是被禁止的吗?

c++ type-conversion language-lawyer auto

9
推荐指数
1
解决办法
137
查看次数

标签 统计

c++ ×2

language-lawyer ×2

auto ×1

type-conversion ×1