具有模糊函数id-expression的C++ 11初始化程序?

 宝一一0702 发布于 2023-02-09 15:20

在以下C++ 11代码中:

void f(int) {}
void f(double) {}

void (*p)(int) = f;

有两个功能.

第三个f标识符是id-expression和初始化器p.

在5.1.1p8 [expr.prim.general]/8中它说:

[id-expression]的类型是标识符的类型.结果是由标识符表示的实体.如果实体是函数,变量或数据成员,则结果是左值,否则为prvalue.

鉴于这f可能是指具有两种不同类型的两个不同实体,则没有"实体"或"类型".

标准中是否还有其他一些文字可以解决这种情况?

实现只是将此歧义消除为扩展或是否需要在某处?(没有其他一些文本,人们可能会争辩说实现可能会拒绝f id-expression为含糊不清的.)

1 个回答
  • 标准(见第13.4节)定义:

    在某些上下文中,使用不带参数的重载函数名称解析为函数,指向函数的指针或指向来自重载集的特定函数的成员函数的指针.函数模板名称被认为是在这种上下文中命名一组重载函数.选择的函数是其类型与上下文中所需的目标类型的函数类型相同的函数.

    强调我的.

    在引用之后,有一个类似于你的例子(§13.4/ 5):

    int f(double);
    int f(int);
    int (*pfd)(double) = &f; // selects f(double)
    int (*pfi)(int) = &f; // selects f(int)
    

    就一元&而言,该标准规定(§5.3.1/6并感谢jogojapan):

    重载函数的地址只能在唯一确定引用过载函数版本的上下文中获取.

    但也可以省略(见第13.4/1条):

    重载的函数名称可以在&运算符之后.

    (再次,强调我的)就像你所做的那样,在你的例子中.

    2023-02-09 15:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有