gpt4 book ai didi

c++ - 全局命名空间(C++)中的两个函数没有命名冲突?

转载 作者:行者123 更新时间:2023-12-04 17:05:18 26 4
gpt4 key购买 nike

我创建了两个文件,Linkage.cppExternal.cpp .Linkage.cpp :

#include <iostream>

void Log(int x = 5)
{
std::cout << x << "\n";
}

int main()
{
Log();
return 0;
}
External.cpp :
#include <iostream>

void Log(const char* message)
{
std::cout << message << "\n";
}
为什么我没有收到链接器错误?这两个函数都定义在全局命名空间中,因此应该与变量一样存在命名冲突。

最佳答案

Why am I not getting a linker error?


当你写
void Log(int x = 5)//this means that the function named Log can be called without passing 
//any argument because you have provided a default argument which will be
//used in case you don't provide/pass any argument
{
//..other code here
{

上面的意思是名为 Log的函数可以在不传递任何参数的情况下调用,因为您提供了一个默认参数,如果您不提供/传递任何参数,将使用该参数。
下一个 当你写
void Log(const char* message)//this means that this versoin of the function named Log will be called only if you pass an argument of type `char*` . 
{
std::cout << message << "\n";
}

上面的意思是这个版本的函数名为 Log将被称为 仅当 你传递了一个 char* 类型的参数.
现在当你写道:
 Log();
将使用具有默认参数的第一个版本,因为您尚未提供任何参数,因此可以使用第一个版本(因为它是 可行 )并且因为必须采用参数的第二个版本是 不可行 .

关于c++ - 全局命名空间(C++)中的两个函数没有命名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70164978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com