C++ 允许使用 auto 接收 new 表达式的结果,编译器会自动推断其类型为表达式求值后的指针类型
然而,当前版本的 小熊猫C++ 无法自动推断 使用 new 表达式的 auto 类型变量的类型
请考虑如下代码:
#include <iostream>
/* 编辑器无法自动推断 使用 new 表达式的 auto 类型变量的类型 */
/* 这里定义一个用于演示的 my_class 类类型 */
class my_class {
public:
int my_data = 8888;
};
int main() {
/* 编辑器无法自动推断 pointer_to_my_class 为 my_class* 类型 */
auto pointer_to_my_class = new my_class;
// pointer_to_my_class->
std::cout << "pointer contains value " << pointer_to_my_class->my_data << std::endl;
auto * still_pointer_to_my_class = new my_class;
// still_pointer_to_my_class->
std::cout << "auto * is still pointer " << still_pointer_to_my_class->my_data << std::endl;
/* 使用了 new 表达式 后立刻解引用,并将结果赋值给一个 auto& 类型的变量,今后可以通过 delete &变量名 的方式解分配该变量 */
auto& instance_from_new = *new my_class;
// instance_from_new.
std::cout << "this instance contains value " << instance_from_new.my_data << std::endl;
auto pointer_to_my_class_array = new my_class[5]/* {} */; //可以带初始化器
// pointer_to_my_class_array->
// pointer_to_my_class_array[2].
std::cout << "the first element contains value " << pointer_to_my_class_array->my_data << std::endl;
std::cout << "the third element contains value " << pointer_to_my_class_array[2].my_data << std::endl;
/* new 表达式临时量(不赋值给任何具名变量,直接放在括号中使用) */
// (new my_class)->
// (new my_class[5])->
// (new my_class[5])[2].
std::cout << "new temp var " << (new my_class)->my_data << std::endl;
std::cout << "new temp array " << (new my_class[5])->my_data << std::endl;
std::cout << "instant use of array element " << (new my_class[5])[2].my_data << std::endl;
/* new auto 表达式 */
auto pointer_to_auto1 = new auto(my_class());
auto pointer_to_auto2 = new auto(my_class{});
// pointer_to_auto1->
// pointer_to_auto2->
std::cout << "pointer_to_auto1 contains value " << pointer_to_auto1->my_data << std::endl;
std::cout << "pointer_to_auto2 contains value " << pointer_to_auto2->my_data << std::endl;
}
编辑器无法自动推断 使用 new 表达式的 auto 类型变量的类型
C++ 允许使用 auto 接收 new 表达式的结果,编译器会自动推断其类型为表达式求值后的指针类型
然而,当前版本的 小熊猫C++ 无法自动推断 使用 new 表达式的 auto 类型变量的类型
请考虑如下代码:
下面是对应的测试代码:
编辑器无法自动推断 使用 new 表达式的 auto 类型变量的类型.zip