c++ - 查询c++中函数的默认返回类型
问题描述
一本书说:
如果未提及返回类型,则默认为 int。
为了检查这一点,我编写了以下代码。
#include <iostream>
print() {
return 3.3;
}
int main(void) {
double d = print();
std::cout << d;
return 0;
}
正如预期的那样,我得到了输出3
。这里没有问题。
我尝试了以下代码,这引起了一些混乱:
#include <iostream>
print() {
char x = 97;
std::cout << x;
return x;
}
int main(void) {
char c = print();
std::cout << c;
return 0;
}
我在这里期待错误,但我得到的输出为aa
.
我在这里有两个疑问:
如果
print
函数的返回类型默认为int
,并且当我返回字符变量时,为什么我没有收到任何编译错误?究竟返回了
print()
什么?由于没有错误,显然print()
已经返回97
。而是x
在存储a
。那怎么97
退的?
解决方案
[自 VS2005 起在 Visual Studio C++ 中]
您必须指定返回类型,否则您将得到编译“错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int” ...其他系统仅生成警告。
但是,您故意忽略了第一个问题。所以让我们假设无论如何都有print()
回报......int
- 如果 print 函数的返回类型默认为 int,并且我返回字符变量,为什么我没有收到任何编译错误?
- 您可以简单地通过分配给“int”来转换“char”类型
- print() 究竟返回了什么?由于没有错误,显然 print() 已返回 97。但 x 正在存储 a。那么97是如何返回的呢?
- print() 返回一个
integer
由 0 和 1 组成的集合:十进制表示为 97,ASCII 表示为 'a'。任何变量都只是一组零和一,可以用不同的格式表示:十进制、十六进制、ASCII 字符等。
--
如果你想看到 9797 你必须写:
#include <iostream>
int print() // 1st issue: Add a return-type
{
char x = 97; // The ASCII code of 'a' character
std::cout << static_cast<int>(x); // 2nd issue: Cast to int, or it will print 'a'
return x; // You can convert a 'char' type simply by assigning to an 'int'
}
int main()
{
char c = static_cast<char>(print());
std::cout << static_cast<int>(c); // Same 2nd issue
}
“C++ 编译器将char
、signed char
和unsigned char
类型的变量视为具有不同的类型。默认情况下,类型变量char
被提升为就int
好像它们是类型一样signed char
,除非使用 /J 编译选项。在这种情况下,它们被视为类型unsigned char
并且是升级为int
无符号扩展。” 微软文档
推荐阅读
- python - 为什么我不能将这两个数据框连接在一起?
- ruby - 我无法通过 rvm 安装 ruby
- php - vBulletin 自定义注册码不起作用
- php - HTTPD 重新启动错误:无效命令“要求”,可能拼写错误或由模块定义
- php - 检查表codeigniter中是否已经存在两个值
- keras - 关于使用 keras 功能 API 启用/禁用 dropout 的问题
- angular - 不确定如何在 Angular 上为自定义组件应用双向绑定
- url - url查询mydomain.com/myscrip.php/word的服务器端处理
- javascript - 为什么使用 useRef 钩子定义的计数器在每次渲染时都不会递增?
- wordpress - 在 Gatsby 中,使用 Wordpress 作为数据源,使用不同的模板创建不同的页面