首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式转换序列

隐式转换序列
EN

Stack Overflow用户
提问于 2014-11-21 05:07:12
回答 1查看 464关注 0票数 2

N3797§13.3.3.1 over.best.ics说:

转换序列是第4条中定义的隐式转换。

然而,第4条定义了以下转换列表:

  • Lvalue-rvalue转换
  • 数组指针转换
  • 函数指针转换
  • 资格转换
  • 整体晋升
  • 浮点提升
  • 积分变换
  • 浮点变换
  • 浮动积分变换
  • 指针转换
  • 指向成员转换的指针
  • 布尔变换
  • 整数转换秩

请考虑以下示例:

代码语言:javascript
复制
#include <iostream>

using namespace std;

struct A
{
    operator int()
    {
        return 42;
    }
};

A a;

int b = a; //User-defined conversion sequence applied

int main() { }

只要用户定义的转换不属于一组标准转换,该示例中就不应用任何标准转换。那么,我提供的报价有什么意义呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-21 05:37:06

你遗漏的其他引文可能很有启发性:

§13.3.3.1/1隐式转换序列是将函数调用中的参数转换为被调用函数的相应参数类型的转换序列。转换序列是第4条()中定义的隐式转换,这意味着它受对象初始化规则或单个表达式(8.5、8.5.3)引用的约束。

条例草案第4条其实也提到这点。

3表达式e可以隐式转换为类型T当且仅当声明T t=e;对于某些发明的临时变量t (8.5)来说格式良好。 6任何隐式转换的效果与执行相应的声明和初始化,然后使用临时变量作为转换的结果相同。如果T是lvalue引用类型或函数类型的rvalue引用(8.3.2),则结果是lvalue;如果T是对对象类型的rvalue引用,则为xvalue,否则为prvalue。表达式e被用作glvalue当且仅当初始化时使用它作为glvalue。

“全套此类转换”(列于第4条)指的是标准转换。记住,它说标准转换序列可以是空的。第13.3.3.1.2节描述了用户定义的转换序列.它包括:

  • 标准转换序列
  • 用户定义的转换
  • 另一个标准转换序列
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27054485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档