【问题标题】:Initialize a vector with a custom allocator使用自定义分配器初始化向量
【发布时间】:2021-07-13 03:32:26
【问题描述】:

我正在尝试使用显式分配器初始化向量,但下面的代码似乎不起作用:

vector<int> a1(allocator<int>());
cout << a1.size();  //Error C2228: left of '.size' must have class/struct/union

还有一个工作版本:

vector<int> a2(*(new allocator<int>()));
cout << a2.size();  // OK

还有一个:

vector<int> a3(a2, allocator<int>());
cout << a3,size();  // OK

我想知道为什么只有第一个版本不起作用。我将 MSVC 与 C++17 一起使用,编译器似乎不会将 a1 视为对象。谢谢。

【问题讨论】:

  • a1 是一个函数声明。你成了most vexing parse的受害者。
  • @HolyBlackCat 非常感谢!实际上,我对这个术语很陌生。我会检查一下它是如何工作的。
  • 你试过vector a1( allocator{ } ); ?
  • google“最令人头疼的解析”。
  • @AlessandroTeruzzi 谢谢,这个有效!

标签: c++ stl c++17


【解决方案1】:

感谢所有给我建议的人,这被称为“最令人头疼的解析”,可以通过统一初始化来解决:

vector<int> a1(allocator<int>{});

所以 a1 现在是一个向量。否则,a1 将被解释为一个函数,它接收std::allocator&lt;int&gt; (*)() 类型的参数并返回vector&lt;int&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2011-05-20
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多