将0作为参数发送时会调用哪些函数

时间:2018-08-25 15:04:49

标签: c++ overloading

void func_print(int value) { 
    std::cout << “int” << std::endl;
}
void func_print(void* value) {
    std::cout << “void” << std::endl;
}

int main() {
    func_print(0);
    func_print(NULL);
}

我似乎找不到。我的编译器可能会损坏,因为它给我带来了流浪错误,无法找到错误所在。

g++: error: -E or -x required when input is from standard input
c.cpp:3:5: error: stray ‘\342’ in program
     std::cout << “int” << std::endl;
     ^
c.cpp:3:5: error: stray ‘\200’ in program
c.cpp:3:5: error: stray ‘\234’ in program
c.cpp:3:5: error: stray ‘\342’ in program
c.cpp:3:5: error: stray ‘\200’ in program
c.cpp:3:5: error: stray ‘\235’ in program
c.cpp:6:5: error: stray ‘\342’ in program
     std::cout << “void” << std::endl;
     ^
c.cpp:6:5: error: stray ‘\200’ in program
c.cpp:6:5: error: stray ‘\234’ in program
c.cpp:6:5: error: stray ‘\342’ in program
c.cpp:6:5: error: stray ‘\200’ in program
c.cpp:6:5: error: stray ‘\235’ in program
c.cpp: In function ‘void func_print(int)’:
c.cpp:3:21: error: expected primary-expression before ‘int’
     std::cout << “int” << std::endl;
                     ^
c.cpp: In function ‘void func_print(void*)’:
c.cpp:6:21: error: expected primary-expression before ‘void’
     std::cout << “void” << std::endl;
                     ^
c.cpp: In function ‘int main()’:
c.cpp:11:20: error: call of overloaded ‘func_print(NULL)’ is ambiguous
     func_print(NULL);
                    ^
c.cpp:2:6: note: candidate: void func_print(int)
 void func_print(int value) { 
      ^
c.cpp:5:6: note: candidate: void func_print(void*)
 void func_print(void* value) {

这里的所有错误都通过消息进行了解释,尽管我不完全知道这是什么错误。

1 个答案:

答案 0 :(得分:1)

  

当您发送0作为参数时会调用哪些函数

通话不明确。重载解析都不推荐使用这两个函数,因为0既是int文字,也是指针文字。模棱两可的调用会使程序格式错误,因此不需要编译器来接受它。这是编译器告诉您的:

error: call of overloaded ‘func_print(NULL)’ is ambiguous

std::cout << “void” << std::endl;

这是错误的,因为那里的(左双引号)不是有效字符。您极有可能尝试编写字符串文字。字符串文字使用"(引号)字符,这是相似的。这是编译器告诉您的:

error: expected primary-expression before ‘void’

  

它没有应由其自己(应该是)编译的任何包含或标头

您的假设是错误的。除了前面提到的问题之外,std::cout(或std名称空间中的任何其他内容)必须在不包含标准头的情况下使用。