C++中存在auto无法替换为显式类型的场景吗?附二维数组实例
关于C++中auto显式类型替代的问题
首先说你遇到的代码问题:auto x = new int[10][10];里x的类型确实是int(*)[10],但你写的int (*) x[10];是语法错误。C++里声明这类指针变量时,变量名必须放在括号里,正确的显式声明应该是:
int (*x)[10] = new int[10][10];
这个写法是合法的,能正常编译运行,所以你的案例不属于auto无法被显式类型替代的场景,只是声明语法没写对。
再说说C++里确实存在auto无法被显式类型替代的场景,常见的有这几种:
- 匿名类型的变量:比如直接定义匿名结构体/联合体变量,像
auto obj = struct { int val; }{};,这种情况下你没法直接写出obj的显式类型,只能用auto或者借助decltype来声明同类型变量。 - Lambda表达式的闭包类型:每个lambda的类型都是编译器生成的匿名独有的闭包类型,你没法显式写出这个类型,只能用auto来声明lambda变量,或者用
std::function包装(但std::function是通用包装器,和原闭包类型不是一回事)。 - 某些依赖模板推导的复杂类型:比如一些模板库中生成的嵌套、依赖推导的类型,虽然可以用
decltype来获取类型,但如果要直接声明变量,没法手动写出完整的显式类型,只能靠auto推导。
内容的提问来源于stack exchange,提问作者traveh
相关产品推荐
相关产品推荐

