小编dar*_*enn的帖子

什么时候创建全局变量?

我有一段代码结构如下:

a.cpp:  
    #include "b.hpp"  
    const unsigned a =  create(1);


b.cpp:
    map<int, string> something; // global variable
    unsigned create(unsigned a){
        something.insert(make_pair(a, "somestring"));
        return a;
    }
Run Code Online (Sandbox Code Playgroud)

现在,这引发了一个段错误,valgrind说地图尚未创建.它是如何工作的,我应该如何改变它?

c++ initialization

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

奇怪的异常抛出 - 赋值:不允许操作

我想从cin做异步读取因此我有一段代码

client.h

...
boost::asio::posix::stream_descriptor input;
boost::asio::streambuf input_buffer
Run Code Online (Sandbox Code Playgroud)

client.cpp

Client::Client(int argc, char **argv, boost::asio::io_service &io_service)
    : tcp_socket(io_service)
    , udp_socket(io_service)
    , input(io_service, ::dup(STDIN_FILENO))
{
    ...
    read_std_input();
}

void Client::read_std_input() {
    async_read_until(input, input_buffer, '\n',
                     boost::bind(&Client::handle_std_read, this,
                                 boost::asio::placeholders::error,
                                 boost::asio::placeholders::bytes_transferred));
}
Run Code Online (Sandbox Code Playgroud)

问题是:当我以正常方式[./client]运行我的客户端然后通过命令输入一些东西时,它就像魅力一样.但是,当我通过[./client <test]运行它时会抛出:

在抛出'boost :: exception_detail :: clone_impl的实例后终止调用

'what():assign:不允许操作中止

你知道问题可能是什么吗?谢谢!

c++ boost boost-asio

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

获得有界类型的minBound

我一直在尝试做类似的事情:

f :: (Enum a, Bounded a) => A a b -> [(a,b)]  
f x = [(as,bs) | as <- [minBound :: a ..] , bs <- x somefunction as]
Run Code Online (Sandbox Code Playgroud)

但那里的minbound似乎没有用.我该怎么办?

haskell

3
推荐指数
1
解决办法
333
查看次数

多线程服务器,信号处理.POSIX

我在多线程服务器中处理信号处理时遇到问题.我为每个连接创建一个线程,但我希望有一个选项来使用SIGINT终止服务器.然而,当其中一个线程捕获到信号时,事情会变得很糟糕.有没有办法可以阻止线程获取除主线程之外的信号?

multithreading posix signals pthreads

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

3 IEnumerables到1元组

我有3个IEnumerables整数,我想用它来制作一个Tuple数组.什么是最好的方法?如果我只有2个IEnumebles,我会使用Zip,但在这种情况下?

c# ienumerable tuples

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

如何防止以A类中的任何其他方式创建B类的对象

这是我得到的:

class A{
    B* object;
    const B& create_object(){
        if(object == nullptr)
            object = new B(this);
        return *object;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这就是事情.我不应该允许以任何其他方式创建B而不是A.我允许创建B对象的唯一方法是:

A a;
auto b1 = a.create_object();
Run Code Online (Sandbox Code Playgroud)

现在因为我不应该允许创建对象,所以我将所有B的构造函数设为私有,并且说A是B.HOWEVER的朋友.

auto b1 = a.create_object();
Run Code Online (Sandbox Code Playgroud)

它不会在调用复制构造函数时编译.有什么办法可以避免吗?我不想返回指针,它需要是一个对象.

c++ constructor

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

是否安全地从无效指针中插入双端队列?

文档说明了这一点

与矢量不同,deques不保证将其所有元素存储在连续的存储位置

这是否意味着如果我将一个deque转换为void*然后回到原始deque,我可能最终会得到一些随机数据?

c++ stl

0
推荐指数
1
解决办法
519
查看次数