C++ 中的定义不明确
ambigious definitions in c++
我不知道为什么f的调用是模棱两可的:/我知道这三个声明没问题,但在这种情况下,这是行不通的。
#include <iostream>
using namespace std;
void f(int);
void f(int &);
void f(const int &);
void f(int a);
void f(int &a);
void f(const int &a);
int main()
{
int i=1;
const int ic=2;
int &ri=i;
const int & rc=ic;
f(i);
f(ic);
f(ri);
f(rc);
return 0;
}
我知道这三个声明是可以
的
如何?所有参数都可以转换为 int
。模棱两可是显而易见的。
你认为int x = rc;
不会编译吗?
我认为您的困惑源于void f(int);
.由于参数是按值传递的,因此可以在新int
中复制的任何内容都与此重载匹配。
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- 对函数的重新定义和不明确的调用具有数组参数
- rpcndr 和 cstddef 中的不明确字节定义
- 循环依赖(类对类型定义,类型定义对类),前向声明给出不明确的调用
- 使用自定义转换运算符的不明确性
- 关于解引用运算符是否在表达式中产生对象对值的定义不明确
- 解决隐藏歧义的不明确用户定义转换
- 与auto_ptr声明不同,当unique_ptr声明的模板类型不完整时,它是否是明确定义的?
- 当一个定义位于命名空间中时不明确的函数调用
- 当将不相关类型定义为别名时,对函数的调用是不明确的
- 在 C 中定义指令不明确
- 为什么链接器看不到我的(明确定义的)外部?
- C++ 中的定义不明确
- 为什么标准不允许 std::for_each 对无效的随机访问迭代器范围有明确定义的行为?
- 使用显式用户定义的强制转换运算符调用函数是不明确的
- c++类型定义不明确
- 不明确的if和else分支:是否定义了行为
- 不明确的引用和命名空间(来自两个外部库的定义冲突)