c++ 当你发送0作为参数时,哪些函数会被调用?[关闭]

prdp8dxp  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(89)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
4年前关闭。
Improve this question
考虑:

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) {

这里所有的错误都用消息来解释,虽然我不知道到底是什么错了。

wvt8vs2t

wvt8vs2t1#

当你发送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命名空间的任何东西)在不包含标准头的情况下都不能使用。

相关问题