我是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
答案 0 :(得分:4)
我能找到的唯一相关内容是[basic.scope.pdecl]中的注释:
块作用域中的函数声明和使用块作用域中的extern说明符的变量声明引用作为封闭命名空间成员的声明,但它们不会在该作用域中引入新名称。
所以当你写:
// Retrieve the list of videos uploaded to the authenticated user's channel.
var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync();
该内部声明引用封闭命名空间的成员。所以这相当于写了:
ExecuteAsync
但是函数不能仅仅在返回类型中过载,因此这段代码是错误的。 Clang拒绝这两个程序,gcc只拒绝后者。我相信这是一个gcc bug。