代码之家  ›  专栏  ›  技术社区  ›  Mushy

C++11自动和void*泛型

  •  0
  • Mushy  · 技术社区  · 8 年前

    基于 this ,我可以推断吗 int age = 45; auto* page = &age; std::cout << *page; void* 需要类型知识才能转换它并获取价值?

    auto* 将是一个非常合适和理想的替代 .

    3 回复  |  直到 8 年前
        1
  •  2
  •   R Sahu    8 年前

    我正在重新学习c++并思考 auto* void*

    不,那不行。

    int i;
    auto* p1 = &i;
    double d;
    auto* p2 = &d;
    
    p1 = p2; // Won't work.
    

    p1 p2 使用 auto 关键字,这些对象的类型不同。他们是 int* double* 分别地

    我们曾经

    void* p1 = &i;
    void* p2 = &d;
    

    p1 = p2;
    

    std::any boost::any 获得泛型支持。

        2
  •  1
  •   Marco Veglio    8 年前

    auto foo = GetFoo(); 不是用来取代 void* auto ed变量有一个非常特定的编译时确定的类型。这个 汽车 汽车 变量您必须分配它,以便编译器能够知道它实际上是什么类型)

    顺便提一下 auto* 没有添加任何内容 汽车

    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 
    
        3
  •  1
  •   Guillaume Racicot    8 年前

    有一些有用的应用 void* 它丢弃了每种类型的信息,并让你发挥记忆。鉴于 auto 正在编译时推断类型信息。

    例如,你可以有一个向量 :

    // please don't do that unless you have good reason.
    std::vector<void*> vars;
    
    vars.push_back(new int);
    vars.push_back(new double);
    

    汽车 ,因为它必须在编译时推断。即使是推断出来的,容器也将包含所有相同的类型:

    // An old concept syntax, rejected
    
    std::vector<auto*> vars = std::vector<int*>{};
    
    vars.push_back(new int);
    vars.push_back(new double); // error! double* is not int*!
    

    都是编译时。 无效* 删除所有编译时知识。所以 不是替代 无效*