【发布时间】:2014-04-21 00:27:16
【问题描述】:
来自我的 C++ 教科书
函数原型的一个重要特性是参数强制 - 即,强制参数为参数声明指定的适当类型。例如,一个程序可以调用一个函数 一个整数参数,即使函数原型指定了一个 双参数 - 该函数仍然可以正常工作。
我试过了
#include <iostream>
// void foo(double);
void foo(double a) {
std::cout << sizeof(a) << std::endl;
}
int main (void){
int a = 1;
std::cout << sizeof(a) << std::endl;
foo(a);
return 0;
}
如果有或没有原型,它会先正确打印 4 然后 (内部函数) 8.
我的编译器是否会在不存在的情况下检查函数定义 原型(可能不是严格的 C++ 标准,但 也有用)还是我错过了什么?
【问题讨论】:
-
这里有什么困惑?您在
main中有一个int,在foo中有一个double;它们的尺寸不同(在您的平台上)。 -
我的困惑来自我的教科书陈述,因为我没有使用原型
-
我认为混淆是关于
prototype这个词。你把prototype理解为declaration,但是prototype是一个函数的签名,而这里,你的函数的definition直接有prototype,前面的declaration是没用的。跨度> -
@AntiClimacus 发布的代码是最后一次完成的测试。以前我把函数定义放在main下面。但是我不明白一件事:您在这里说第 5 行
void foo(double a) {用作原型? PS。最后,我认为我的书不如其他地方准确。 -
@LucaBraglia:阅读这篇文章:stackoverflow.com/questions/1410563/… 并记住
prototype包含在声明和定义中。