Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;如何声明具有虚拟基类型的全局静态分配变量?_C++_Memory - Fatal编程技术网

C++ 在C++;如何声明具有虚拟基类型的全局静态分配变量?

C++ 在C++;如何声明具有虚拟基类型的全局静态分配变量?,c++,memory,C++,Memory,[编辑:抱歉,最初混淆了基类和子类] 给定 我想声明一个类型为Vehicle(或&Vehicle,如果需要)的全局变量,初始化为Car实例。。。差不多 Vehicle &myCar = Car(red); 。。。除了上面没有编译。 对我来说重要的是,实例的分配方式与我使用的方式完全相同(这是用于AVR编程的) 我已经搜索过了,但我就是搞不懂这个的语法 谢谢 您可以这样做: Car myActualCar(red); Vehicle &myCar = myActualCar;

[编辑:抱歉,最初混淆了基类和子类]

给定

我想声明一个类型为Vehicle(或&Vehicle,如果需要)的全局变量,初始化为Car实例。。。差不多

Vehicle &myCar = Car(red);
。。。除了上面没有编译。 对我来说重要的是,实例的分配方式与我使用的方式完全相同(这是用于AVR编程的)

我已经搜索过了,但我就是搞不懂这个的语法

谢谢

您可以这样做:

Car myActualCar(red);
Vehicle &myCar = myActualCar;
首先创建
汽车
,然后提供绑定到汽车的
汽车
参考

如果不想将
myActualCar
公开到文件的其余部分,可以使用lambda函数隐藏它(这类似于JavaScript中的IIFE技术):


此技术需要C++11。

如果不希望有派生类型的显式变量:

Vehicle &&myCar = Car(red);

右值引用将根据需要延长临时值的生存期。相比之下,它的优点是
汽车
保持其自动使用寿命,而不是静止不动。

你的概念倒过来了<代码>汽车是一种
车辆
,而不是相反。不能实例化基类,然后将其分配给派生类。请使用指针类型。您不能初始化不完整的类型,只能分配“初始化为车辆实例”是什么意思?Car&myCar=Vehicle(红色);这是完全错误的。您可以做的是:静态Car*\u myCar=nullptr;静态车辆*getCar(){if(nullptr==\u myCar;)\u myCar=新车(红色);返回\u myCar;};这也是需要同步的。看起来这是XY的问题,你不明白你想要/需要做什么。汉克斯,我正准备发布这个;因此,没有办法避免将myActualCar变量暴露给程序的其余部分?在@SergeyA(已删除)的答案中有一种方法。我已投票取消删除它,但它又在这里:
Vehicle&myCar=[](){static Car myActualCar(红色);return myActualCar;}()哇:)我接受你的答案。我不知道C++编译器和AVR C++编译器的100%,这将导致目标处理器上的内存分配完全相同,所以我将使用虚拟的“实际”变量。谢谢
Car myActualCar(red);
Vehicle &myCar = myActualCar;
Vehicle &myCar = []() -> Car & { static Car myActualCar; return myActualCar; }();
Vehicle &&myCar = Car(red);