在C ++中违反类型安全与其他类型的函数声明?

我是C ++新手,只是尝试一些东西。 我坚持下面的代码:

#include<iostream>  

void t(){
    std::cout << "func t()" << std::endl;
}

int main(int argc, char **argv) {
    int t(); //declaration of function
    std::cout << t() << std::endl;
}

输出是“func t() n6295712”。 我关心的是由t()打印的随机数(?)。

我的问题是:为什么它允许声明另一个返回类型的函数(这里:int而不是void)没有任何错误? 这是不是违反类型安全,因为我从来没有定义一个返回类型为“int”的函数?

使用的编译器:gcc(Ubuntu 4.8.4-2ubuntu1〜14.04.1)4.8.4


我能找到的唯一相关的东西是[basic.scope.pdecl]中的一个注释:

块范围的函数声明和块范围的extern说明符的变量声明是指作为封闭名称空间成员的声明,但它们不会在该范围中引入新名称。

所以,当你写:

void t();

int main() {
    int t();  // *
}

该内部声明引用封闭名称空间的成员。 所以这相当于写了:

void t();
int t();

int main() {}

但函数不能仅仅在返回类型中重载,所以这个代码是不合格的。 Clang拒绝这两个程序,gcc只拒绝后者。 我相信这是一个海湾合作委员会的错误。

链接地址: http://www.djcxy.com/p/90995.html

上一篇: Violation of type safety in C++ with function declaration of other type?

下一篇: highlight HTML inside JavaScript strings in Sublime