Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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++;11自动和无效*泛型_C++_C++11_Void Pointers_Auto - Fatal编程技术网

C++ C++;11自动和无效*泛型

C++ C++;11自动和无效*泛型,c++,c++11,void-pointers,auto,C++,C++11,Void Pointers,Auto,根据,我可以推断int age=45;自动*页面=&age;std::coutauto foo=GetFoo()并不意味着要取代void*。auto'ed变量具有非常特定的编译时确定的类型。auto关键字表示编译器“请为我推断对象类型”。实际上,您不能只声明一个auto变量。您必须分配它,以便编译器能够知道它实际上是什么类型) 这对于模板化类型尤其有用,因为模板化类型可能具有繁琐、冗长和难看的语法,但对于泛型编程肯定不适用 顺便说一句,auto*并没有真正添加任何wrt-plainauto。在每

根据,我可以推断
int age=45;自动*页面=&age;std::cout
auto foo=GetFoo()并不意味着要取代
void*
auto
'ed变量具有非常特定的编译时确定的类型。
auto
关键字表示编译器“请为我推断对象类型”。实际上,您不能只声明一个
auto
变量。您必须分配它,以便编译器能够知道它实际上是什么类型)

这对于模板化类型尤其有用,因为模板化类型可能具有繁琐、冗长和难看的语法,但对于泛型编程肯定不适用

顺便说一句,
auto*
并没有真正添加任何wrt-plain
auto
。在每种情况下,类型都由表达式right-hand-side给出

auto* foo = nullptr;   // compile error: cannot determine type
void* vFoo = nullptr;  // OK, void* type variable
int bar = 5;           // declares int variable
auto pBar = &bar;      // compile-time determined type: int*
auto* pBar2 = &bar;    // same as pBar
vFoo = &bar;           // OK
double otherBar = 5.0; // declares double variable
pBar = &otherBar;      // compile error: wrong type 
auto-foo=GetFoo()并不意味着要取代
void*
auto
'ed变量具有非常特定的编译时确定的类型。
auto
关键字表示编译器“请为我推断对象类型”。实际上,您不能只声明一个
auto
变量。您必须分配它,以便编译器能够知道它实际上是什么类型)

这对于模板化类型尤其有用,因为模板化类型可能具有繁琐、冗长和难看的语法,但对于泛型编程肯定不适用

顺便说一句,
auto*
并没有真正添加任何wrt-plain
auto
。在每种情况下,类型都由表达式right-hand-side给出

auto* foo = nullptr;   // compile error: cannot determine type
void* vFoo = nullptr;  // OK, void* type variable
int bar = 5;           // declares int variable
auto pBar = &bar;      // compile-time determined type: int*
auto* pBar2 = &bar;    // same as pBar
vFoo = &bar;           // OK
double otherBar = 5.0; // declares double variable
pBar = &otherBar;      // compile error: wrong type 

我正在研究C++,认为 Auto*<代码>将是一个非常适合和理想的替换<代码> Value*/Cuff>

不,那不行

int i;
auto* p1 = &i;
double d;
auto* p2 = &d;

p1 = p2; // Won't work.
尽管使用
auto
关键字声明了
p1
p2
,但这些对象的类型不同。它们分别是
int*
double*

我们用过吗

void* p1 = &i;
void* p2 = &d;
以下几点就可以了

p1 = p2;
在核心语言级别不提供对泛型的支持。您必须使用或获得泛型的支持

我正在研究C++,认为 Auto*<代码>将是一个非常适合和理想的替换<代码> Value*/Cuff>

不,那不行

int i;
auto* p1 = &i;
double d;
auto* p2 = &d;

p1 = p2; // Won't work.
尽管使用
auto
关键字声明了
p1
p2
,但这些对象的类型不同。它们分别是
int*
double*

我们用过吗

void* p1 = &i;
void* p2 = &d;
以下几点就可以了

p1 = p2;

在核心语言级别不提供对泛型的支持。您必须使用或获得泛型的支持。

有一些有用的应用程序
void*
它丢弃所有类型信息,让您使用内存。而
auto
则在编译时推断类型信息

例如,可以将向量设置为
void*

// please don't do that unless you have good reason.
std::vector<void*> vars;

vars.push_back(new int);
vars.push_back(new double);

auto
都是编译时<代码>无效*
删除所有编译时知识。因此,
auto
并不能取代
void*
,相反。

void*
有一个有用的应用程序,它可以丢弃所有类型的信息,让你玩内存游戏。而
auto
则在编译时推断类型信息

例如,可以将向量设置为
void*

// please don't do that unless you have good reason.
std::vector<void*> vars;

vars.push_back(new int);
vars.push_back(new double);

auto
都是编译时<代码>无效*
删除所有编译时知识。因此,
auto
并不是取代
void*
,而是恰恰相反。

为了回答这个问题,什么是“真正的泛型”?@rex我暗示,包括取消引用在内的操作可以在不考虑类型的情况下发生。据我所知,泛型推断类型是泛型的、未知的、不可跟踪的。我认为,
void*
充其量是伪泛型。为了回答这个问题,什么是“真正的泛型”?@rex我暗示,包括取消引用在内的操作可以在不考虑类型的情况下发生。据我所知,泛型推断类型是泛型的、未知的、不可跟踪的。我认为
void*
充其量是伪泛型;那么,如果可以为auto分配一个类型,但在它的“生命周期”内必须保持该类型,那么为什么auto意味着泛型会大肆宣传呢?@Mushy,
auto
仅仅意味着自动推断类型。我不知道谁在创造你所说的炒作。读Stroustrups的C++书,我得到一个观点,即AutoUnter的最佳使用是避免长类型名称,但仍然需要知道使用什么类型的代码“Auth< <代码> >,就像<代码> Value*/Cuff> >,所以我看不到其中任何一个的通用优势。好点;那么,如果可以为auto分配一个类型,但在它的“生命周期”内必须保持该类型,那么为什么auto意味着泛型会大肆宣传呢?@Mushy,
auto
仅仅意味着自动推断类型。我不知道是谁在创造你所说的炒作。读Stroustrups的C++书,我得到了AutoUnter的最佳用法是避免长类型名称,但仍然需要知道使用什么类型的代码“Auth< <代码> >,就像 Value*/Cord> >,所以我看不到它们中的任何一个通用的优点。