小编Pus*_*try的帖子

c ++ 1z动态异常规范错误

我正在尝试使用新的GCC版本7.2.1编译我的项目,并且遇到动态异常规范的问题:

error: ISO C++1z does not allow dynamic exception specifications
  MEMORY_ALLOC_OPERATORS(SQLException)
Run Code Online (Sandbox Code Playgroud)

问题是这些错误来自我无法控制的第三方库.

有没有办法解决它?据我所知,我不能告诉编译器用警告替换错误.使用--std=c++14不是一个选项,因为我想使用C++ 1z的新功能.

c++ exception-specification c++17 gcc7

13
推荐指数
2
解决办法
5599
查看次数

使用另一个地图中的值更新地图

假设我有两个相同类型的映射,并且第二个映射的键集是第一个映射的键的子集。我想用第二个映射中的值更新第一个映射值(仅适用于第二个映射包含的键)。

我已经编写了一个简单的循环来执行此操作,但我想知道是否有更好的方法使用 STL 算法来编写它。

代码示例:

using PersonAgeMap = std::map<std::string, int>;

PersonAgeMap map1;
map1.insert(std::make_pair("John", 23));
map1.insert(std::make_pair("Liza", 19));
map1.insert(std::make_pair("Dad", 45));
map1.insert(std::make_pair("Granny", 77));

PersonAgeMap map2;
map2.insert(std::make_pair("John", 24));
map2.insert(std::make_pair("Liza", 20));

//simple cycle way
for (const auto& person: map2)
{
    map1[person.first] = person.second;
}

//is there some another way of doing this using STL algorithms???

for (const auto& person: map1)
{
    std::cout << person.first << " " << person.second << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

  Dad 45
  Granny 77
  John 24
  Liza 20
Run Code Online (Sandbox Code Playgroud)

c++ algorithm dictionary stl

5
推荐指数
1
解决办法
1643
查看次数

std :: unique_ptr使用自定义删除器,参数很少

我想知道是否可以使用多个参数(标准删除签名)为std :: unique_ptr指定自定义删除器.我知道使用std :: shared_ptr存在与std :: bind的解决方法,这使得它成为可能但是std :: unique_ptr存在的一些技巧?

对我来说似乎不是因为根据http://en.cppreference.com/w/cpp/memory/unique_ptr:

类型要求-Deleter必须是FunctionObject或lvalue引用的FunctionObject或lvalue函数引用,可以使用类型unique_ptr :: pointer的参数调用

c++ unique-ptr c++11

4
推荐指数
1
解决办法
1492
查看次数

c++11随机引擎和分布交互和成本

我有一堆关于随机引擎和分布、它们的成本和交互的问题:

  1. std::random_device一个昂贵的(重型可构造的)对象吗?如果可能,我应该只为我的应用程序创建一个吗?
  2. RandomNumberDistribution对象昂贵的对象还是主要取决于具体的分布?在我看来,例如uniform_int_distribution应该是包含分布范围的非常轻的对象,[min, max]并且可能是(?)某种内部状态。
  3. random_device,random_engine和之间的交互如何distribution在下面的代码中工作:

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> distr(1, 10);
    
    auto random_value = distr(gen);
    
    Run Code Online (Sandbox Code Playgroud)

最后一行会发生什么?分布从随机引擎获取下一个值,然后将其带到所需范围[0, 10]?总是很明显一些对象的内部状态应该在调用后修改:绝对random_devicerandom_engineuniform_int_distribution也有一些内部状态?

c++ random c++11

2
推荐指数
1
解决办法
356
查看次数