Pup*_*ppy 7 c++ member-function-pointers rules member-functions standard-library
将函数指针或成员函数指针带到标准函数的现有规则是什么?例如,像
auto p = &std::string::size;
Run Code Online (Sandbox Code Playgroud)
这合法吗?如果我明确地请求了正确的类型,它会或多或少是合法的,所以即使有额外的实现添加重载,它也会起作用std::string::size吗?
使用"正确"类型并不能使事情变得更好:除了virtual函数之外,标准C++库中的所有函数都可以有其他参数,只要这些函数是默认的.由于函数也可以使用额外的重载声明(除了virtual函数之外),您最终可能会尝试为重载分配一个变量.因此,代码不可移植,并且没有办法通过使用某种类型的转换或某些签名而不是使其可移植auto.
相关引用是17.6.5.5 [member.functions]第1段:
实现可以在类中声明其他非虚拟成员函数签名:
---通过向成员函数签名添加具有默认值的参数;
- 通过两个或多个具有等效行为的成员函数签名将成员函数签名替换为默认值; 和
-通过增加一个成员函数签名的成员函数名.
但是,我没有看到非成员函数的类似许可.不知道弄乱这些的许可在哪里隐藏,但我相对确定这些也有一些狡猾的话.进一步看,根据17.6.5.4 [global.functions]第3段,非成员函数似乎更受限制:
实现不应使用其他默认参数声明全局或非成员函数签名.
这意味着,在指定所需签名时,至少可以获取非成员函数的地址.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |