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::coutauto foo=GetFoo()代码>并不意味着要取代void*
。auto
'ed变量具有非常特定的编译时确定的类型。auto
关键字表示编译器“请为我推断对象类型”。实际上,您不能只声明一个auto
变量。您必须分配它,以便编译器能够知道它实际上是什么类型)
这对于模板化类型尤其有用,因为模板化类型可能具有繁琐、冗长和难看的语法,但对于泛型编程肯定不适用
顺便说一句,auto*
并没有真正添加任何wrt-plainauto
。在每种情况下,类型都由表达式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-plainauto
。在每种情况下,类型都由表达式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< <代码> >,就像