C++ 在C++;

C++ 在C++;,c++,linker-errors,C++,Linker Errors,将函数声明为如下变量的语义是什么: int main() { int foo(); std::cout << foo; // prints 1 } intmain(){ int foo(); std::cout如果查看,您将看到来自编译器的警告消息: 指向函数的指针永远不能是空指针。但是因为您只有一个原型、一个声明,而没有任何实际的函数定义,所以编译器会将其计算为“true”。如果查看,您会看到编译器发出的警告消息: 一个函数的指针永远不能是空指针。但是因为你所拥有

将函数声明为如下变量的语义是什么:

int main() {
    int foo();
    std::cout << foo; // prints 1
}
intmain(){
int foo();
std::cout如果查看,您将看到来自编译器的警告消息:

指向函数的指针永远不能是空指针。但是因为您只有一个原型、一个声明,而没有任何实际的函数定义,所以编译器会将其计算为“true”。

如果查看,您会看到编译器发出的警告消息:


一个函数的指针永远不能是空指针。<强>但是因为你所拥有的都是原型、声明,而不是任何实际函数定义。编译器将其评估为“true”。

< P>编译C++编译器中的程序并查看警告:

Warning(s):
source_file.cpp:5:12: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
    int foo();
           ^~
source_file.cpp:5:12: note: replace parentheses with an initializer to declare a variable
    int foo();
           ^~
            = 0
source_file.cpp:6:18: warning: address of function 'foo' will always evaluate to 'true' [-Wpointer-bool-conversion]
    std::cout << foo; // prints 1
              ~~ ^~~
source_file.cpp:6:18: note: prefix with the address-of operator to silence this warning
    std::cout << foo; // prints 1
                 ^
                 &
2 warnings generated.
警告:
source_file.cpp:5:12:警告:解释为函数声明的空括号[-Wvexing parse]
int foo();
^~
source_file.cpp:5:12:注意:用初始值设定项替换括号以声明变量
int foo();
^~
= 0
source_file.cpp:6:18:警告:函数“foo”的地址将始终计算为“true”[-Wpointer bool conversion]

STD::CUT< P>编译C++程序中的程序,并查看警告:

Warning(s):
source_file.cpp:5:12: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
    int foo();
           ^~
source_file.cpp:5:12: note: replace parentheses with an initializer to declare a variable
    int foo();
           ^~
            = 0
source_file.cpp:6:18: warning: address of function 'foo' will always evaluate to 'true' [-Wpointer-bool-conversion]
    std::cout << foo; // prints 1
              ~~ ^~~
source_file.cpp:6:18: note: prefix with the address-of operator to silence this warning
    std::cout << foo; // prints 1
                 ^
                 &
2 warnings generated.
警告:
source_file.cpp:5:12:警告:解释为函数声明的空括号[-Wvexing parse]
int foo();
^~
source_file.cpp:5:12:注意:用初始值设定项替换括号以声明变量
int foo();
^~
= 0
source_file.cpp:6:18:警告:函数“foo”的地址将始终计算为“true”[-Wpointer bool conversion]

std::难道你没有声明一个函数。你确定你没有与构造函数混淆吗?这不是将函数声明为变量。这是声明一个函数,句点。@MateenUlhaq这是一个函数声明。你确定你没有与一个合理的语言混淆吗?:-)你应该问的是“当从未定义
foo
时,为什么这不会导致链接器错误?”。该问题甚至可能会获得一些赞成票。当已经有答案时,请不要将问题更改为询问其他问题(即使新问题可能是“更好”的问题)您没有声明函数。您确定没有与构造函数混淆吗?这不是将函数声明为变量。这是声明函数,句点。@MateenUlhaq这是函数声明。您确定没有与合理的语言混淆吗?:-)您应该问的是“当
foo
从未定义时,为什么这不会导致链接器错误?”。该问题甚至可能会获得一些支持票。当已经有答案时,请不要将问题更改为询问其他问题(即使新问题可能是“更好”的问题)