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直接当作一个类型,只是这个类型在初始化的时候可以根据值来直接推断类型。