小编qdi*_*dii的帖子

是否有无锁矢量实现?

谷歌为"锁定免费载体"的第一个结果是Damian Dechev,Peter Pirkelbauer和Bjarne Stroustrup描述理论无锁向量的研究论文.这个或任何其他无锁向量是否已实现?

c++ concurrency vector lock-free concurrent-vector

11
推荐指数
1
解决办法
4379
查看次数

使用Autotools预编译的头文件

是否可以在使用automake/libtool的项目中使用gcc预编译头文件?

添加新的make规则来构建预编译头文件并不困难.问题是你还必须添加由libtool和AFAIK引入的编译标志,它无法处理标头输入文件.

你怎么能这样做?

automake autoconf autotools precompiled-headers libtool

9
推荐指数
1
解决办法
1959
查看次数

通用lambda的编译器推导类型

本文中,提供了以下代码:

std::vector<int> ivec = { 1, 2, 3, 4};
std::vector<std::string> svec = { "red", "green", "blue" };
auto adder = [](auto op1, auto op2){ return op1 + op2; };
std::cout << "int result : "
          << std::accumulate(ivec.begin(),
                             ivec.end(),
                             0,
                             adder)
          << "\n";
std::cout << "string result : "
          << std::accumulate(svec.begin(),
                             svec.end(),
                             std::string(""),
                             adder)
          << "\n";
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,编译器将生成一个类似这样的内部类:

template<class T>
class _lambda
{
  public:
  T operator()(T lhs, T rhs) { return lhs + rhs; }
};
Run Code Online (Sandbox Code Playgroud)

但我不明白的是,在代码的这一部分中,加法器似乎同时有两种类型:_lambda<int>_lambda<string> …

c++ lambda type-deduction c++14

9
推荐指数
2
解决办法
152
查看次数

如何获取使用标准库创建的线程的winapi id?

C++ 11的标准库包含<thread>允许创建线程的标准库.但是,Windows api需要某些函数的ID(即PostThreadMessage).我怎么才能得到它?

评论:std::thread::get_id()似乎不起作用:

PostThreadMessage(m_thread->get_id(), WM_QUIT, 0, 0);

e:\documents\khook\khooker\hook_runner.cpp(129): error C2664: 'PostThreadMessageW' : cannot convert parameter 1 from 'std::thread::id' to 'DWORD'
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi multithreading c++11

8
推荐指数
1
解决办法
2839
查看次数

"核心语言"是什么意思?

在GCC文档的此页面上的表格中,其中一个项目(大约在表格的一半)仅被列为"核心语言".那是什么意思?该语言的哪些部分不包括在内?

c++ gcc

8
推荐指数
1
解决办法
3797
查看次数

传递给C库的函数指针的C链接

我的情况非常简单:我希望我的C++程序能够处理Unix信号.为此,glibc在signal.h中提供了一个函数调用sigaction,它希望接收一个函数指针作为它的第二个参数.

extern "C"
{
void uponSignal(int);
}

void uponSignal(int)
{
    // set some flag to quit the program
}

static
void installSignalHandler()
{
    // initialize the signal handler
    static struct sigaction sighandler;
    memset( &sighandler, 0, sizeof(struct sigaction) );
    sighandler.sa_handler = uponSignal;

    // install it
    sigaction( SIGINT, &sighandler, nullptr );
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:extern "C"链接说明符是否必要?

奖金问题:可以申报onSignal static吗?

c c++ signals glibc linkage

8
推荐指数
2
解决办法
671
查看次数

RSA 加密然后解密失败,并显示“oaep 解码错误”

我正在尝试调试一个简单的 openssl 程序,但无法完全理解 openssl 的“oaep 解码错误”含义。我已将我的程序简化为这个,测试,一个:

\n\n
#include <iostream>\n#include <openssl/evp.h>\n#include <openssl/rsa.h>\n#include <openssl/pem.h>\n#include <openssl/err.h>\n#include <assert.h>\n#include <memory>\n#include <list>\n#include <algorithm>\n#include <string.h>\n\nstatic const std::string private_key =\nR"(-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAriDoH3gBbJo+SojeL5j+4yQumXgnjhrt5+FChBxOfvTcyczz\np5qlUNqLzQQcQ/a+XR5qUhaA4l97DgNseFNyoYHIxrB5t+BQw27Q+UuUYYaIwJqZ\n6r2PVCnQF9WPqqWdzBN6+13IlreH2XX4qy47kuLI3lcPlP5qhYaDogpZCl7lN7Oe\nQj2FAPZ1nkV+PL4RYfWZbBymUz0C105ytT7PWgLAZVvag8kHiNXRYv4Ksc9SJ3AE\nZriZ1tzpJ6/ZkI3vfJZqCeclELQ8zGxb8CbfSd4mHoHCVY7t1h+BNM4zUxSjN8d7\nbctYJwnfBtztRFN2uTotDJs6njsoxfmh4/SzAQIDAQABAoIBAAGTWKZYPqMN7jxc\naq5BkyTZAfbviGQXyElN1308iFVLv+evjBDbLF3D7HnpbJwM0oIjMVEW1Qm3VXS2\nAThBgQsHEpsBo8hPJkvuZ8OptGkBf6FGhNgD6RUY38Inc4pWv0vGbVly6sq6VGda\nUuqxm2Zj2O9yGDj/6FTW97/ymgWm/FfKczg/zGtjdog67W8LvvtmAj5ynSuimOP8\nmOINPjewIbcl7rKvxcMNrOXKsRWwVxTNXdMNMsXd1Figw022KTqdiazQ/DPIXU6M\nf8H+U/gS5QZRIAF8i0r3cvq6ai26dX0OFtsoizqG4qlRNwtQ+wyRsilZKiKnFuMY\nbt1pRBUCgYEA1TlAT/Ui4TBdgGmm0Rlj7JKJENnpDKIFE8bP6Vy8SwBmp5MiRofE\nTMne4BBKLcFcslCJrFvjl7+v4B9a2de7hJYqtevrXjM91vwFhc6z0m27vv6MKStQ\n3uKX8+0RGHQ3j53kAvLxFSuAqYQ+gf9IAuyG0gpMABRvj0/8HY3T7tMCgYEA0Q/O\n0og9UbXh8y3yI94ztczWdIQERyEhQiGNRUnHCqO2QbZQ9Nm190Jx/8yew03xpPVb\nfyWWfKqO8Kjg5np0w37porI0UmfLZ5QMC+GFMq0jOUXidsvkyoWOe4D8LII0L98k\nsjihHBlGNrfFjEgOUQaoreB+8F07m/iofRCROlsCgYAPUUGRfOa4jqTo6K4XL1/C\nSvSVxVG8mpcKyKl+9i6ApNK7DxLTRkWPzqC4L/NkPhPOq4J4Y1GCQT79NsNsCtdp\nuu/uibgq2DuFCi3LYwIAB+oI2nhvLLFukZCg8VLdEtw68PjETXeMMcfYZaun4xLl\nQuCcjijPiKhK/0/5P4sOCQKBgHsi7XXRqxRapdg/ArUfpqN5IAOG0qI2oEk8S+I4\nv1TD8pCn2u0s4mHdsBmzovt0CFVZ8udj80xAhWq4facjD20qbmBWyDyVSBgc+i9x\nSKv9kJamU+oW1A55NeAGrAFnO2fK7elPM43CUTnfairjMhOFcYrghMP8liSbBFqN\njIyrAoGAVGZQVZgicmSppbBuZYJPOuegPVYhncq3XtBZCtEGGlMtQpKgz+GRhyvT\nAr/HC7xnS5Gjfyjj6eGHsBAjTsE4t38qD4nxQXzBmAQQ1/7/iq3WNu63OV2q4GRh\nwChOO0pcJPOZfWtvKiy7hbN09e0nt5blX1yqe6LdO7mACWli/Ss=\n-----END RSA PRIVATE KEY-----)";\n\nstatic const std::string public_key = \nR"(-----BEGIN RSA PUBLIC KEY-----\nMIIBCAKCAQEAx5WRSyfFVe/JbPYnswghuMj5Nzo9YG82Z7ehyI/dbjkcdCIzTlKd\nQcMvSUZafAnM9p3xnBrgbKaNltaVNrZNyN6A2ou0PQgms7ykJ67G9Hbbs/uo0rPS\nGS4pYw0QiOvoYXjGqbOzQjXbAV7ez05XRb43nRdZUFO0LLvEp2VfaTL7WWzaan6r\nVe6p8t8JIwpWSn7njBYH2XPNJj1NccpvD+kT1kGn6kWZfmFBzR7Bw2+rW+rpt02F\n4arxXfvzDYhZdxLKb7m2KqwZTiug2HoD5AY9l3GzRIdNvXIDP87XTl4960lpg8cI\n8XuTSLFjSx0fvlXXFwTcgMLv7Q0+ISSXQwIBJQ==\n-----END RSA PUBLIC KEY-----)";\n\nstatic inline \nvoid check_errors()\n{\n    const int error = ERR_get_error();\n    if ( error != 0 )\n    {\n        std::cerr << ERR_reason_error_string( error ) << \'\\n\';\n        assert(0);\n    }\n}\n\nint main()\n{\n    ERR_load_crypto_strings();\n\n    // load rsa keys into a memory buffer\n    BIO * bio_private = BIO_new_mem_buf( (char*) private_key.data(), …
Run Code Online (Sandbox Code Playgroud)

c++ encryption openssl rsa

8
推荐指数
1
解决办法
9495
查看次数

在地图中存储引用

我试图将一个foo对象存储到一个std::reference_wrapper,但我最终得到一个我不明白的编译器错误.

#include <functional>
#include <map>

struct foo
{
};

int main()
{
    std::map< int, std::reference_wrapper< foo > > my_map;
    foo a;
    my_map[ 0 ] = std::ref( a );
}
Run Code Online (Sandbox Code Playgroud)

编译器错误相当冗长,但归结为:

error: no matching function for call to ‘std::reference_wrapper<foo>::reference_wrapper()’
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c++ reference stdmap

8
推荐指数
1
解决办法
533
查看次数

7
推荐指数
1
解决办法
521
查看次数

脱离的std :: optional <T>对象的哈希是什么?

来自cppreference的此页面提到std::hash了专门用于std::optional但未指定对象脱离时的行为的页面.我可以想到不同的行为:

  • 它可以抛出一个std::bad_optional_access,与之相符std::optional::value
  • 它可以为每个std::optional<T>脱离对象返回相同的哈希值,这样2个脱离对象将具有相同的哈希值.
  • 它可以返回一个 std::optional<std::hash<std::optional<T>>>

c++ hash standard-library optional c++14

7
推荐指数
1
解决办法
592
查看次数