为什么添加 sqrt() 不会导致C++冲突?
Why doesn't adding sqrt() cause a conflict in C++?
如果我编写了一个具有C库函数签名的新函数,那么由于歧义,我预计会出现编译错误。但是,我不明白为什么在下面的C++代码中没有错误。
#include <iostream>
#include <cmath>
using namespace std;
double sqrt(double number)
{
return number * 2;
}
int main( )
{
cout << sqrt(2.3) << endl;
cout << ::sqrt(2.3) << endl;
cout << std::sqrt(2.3) << endl;
return 0;
}
如果我将sqrt((的返回类型更改为int,那么由于cmath中的双sqrt(。如何覆盖double sqrt((?(实际上,所有的cmath函数都可以被覆盖,我不知道为什么。(
程序有未定义的行为。
[reserved.names]
1 C++标准库保留以下类型的名称:
1.1(-宏
1.2(-全局名称
1.3(-具有外部链接的名称
2如果程序在保留名称的上下文中声明或定义名称,而不是在本条款明确允许的上下文中,则其行为是未定义的。[extern.names]
4使用外部链接声明的C标准库中的每个函数签名都保留给实现,用作带有extern"C"和extern"C++"链接的函数签名,或用作全局命名空间中命名空间作用域的名称。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- C++ |匿名命名空间与命名空间 std 冲突
- 这个SSDO演示的GLSL版本要求是自我冲突的吗