C++推断类型(auto)

auto

在变量声明时自动推断变量类型,基于初始化表达式的类型。避免重复类型名称

#include<iostream>

int main() {
	auto x = 5;
	auto y = 0.1;
	auto z = "sssss";

	std::cout << typeid(x).name() << std::endl;
	std::cout << typeid(y).name() << std::endl; 
	std::cout << typeid(z).name() << std::endl;
}

输出:
在这里插入图片描述
备注:输出的确切结果取决于你使用的编译器及其版本。一些编译器可能为常见类型提供更可读的名称,而其他编译器可能返回更加抽象或编译器特定的标识符。
char const * __ptr64就是在特定平台的表示。分解解读:
char:基本字符类型
const:表示指针指向的内容是常量,不能通过指针修改所指向的数据。指针本身可以改变,但字符不能修改
__ptr64:明确指定一个指针应在64位地址空间中被解释和使用。

auto能不能区别自定义类呢?

#include<iostream>

class Person {

};

int main() {
	
	Person a;
	auto b=a;
	std::cout << typeid(b).name() << std::endl;
}

输出:
在这里插入图片描述
事实证明也可以直接推断出来。

auto会删除引用

#include <iostream>

using namespace std;

int main()
{
    int count = 10;
    int& countRef = count;
    auto myAuto = countRef;
    cout << "count地址" << &count << endl;
    countRef = 11;
    cout << count <<endl;
    cout << "countRef类型"<<typeid(countRef).name() << endl;
    cout << "地址" << &countRef << endl;
    myAuto = 12;
    cout << count << endl;
    cout << "myAuto类型"<<typeid(myAuto).name() << endl;
    cout << "地址" << &myAuto << endl;
}

输出:
在这里插入图片描述
看结果可知auto删除了引用重新创建了一个int类型的变量,引用跟原变量指向的地址是一样的。而auto后地址发生了改变。

auto也可以处理函数返回类型(C++14以后)

#include <iostream>

using namespace std;


auto add(int x, int y) {
    return x + y;
}
int main()
{
    

    cout << typeid(add(2, 4)).name() << endl;
}

输出:
在这里插入图片描述

auto声明指针

#include <iostream>

using namespace std;

int main()
{
    int x = 4;
    auto* y = &x;

    cout << typeid(y).name() << endl;
}

输出:
在这里插入图片描述

总结

总之将auto直接当作一个类型,只是这个类型在初始化的时候可以根据值来直接推断类型。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值