no_*_*123 7 c++ type-conversion type-safety
我是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;
}
Run Code Online (Sandbox Code Playgroud)
输出为"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(); // *
}
Run Code Online (Sandbox Code Playgroud)
该内部声明引用封闭名称空间的成员。所以它相当于写了:
void t();
int t();
int main() {}
Run Code Online (Sandbox Code Playgroud)
但函数不能仅在返回类型中重载,因此该代码格式不正确。Clang 拒绝这两个程序,gcc 只拒绝后者。我相信这是一个 gcc 错误。
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |