小编Mar*_*tin的帖子

Xlib的空或透明窗口仅显示边框线

有没有办法用Xlib创建一个窗口,它只显示边框线,标题,关闭按钮,你可以用鼠标移动?窗口的内容必须为空(或"完全透明",尽管"透明度"听起来更像是我不需要的效果).基本上窗口应该显示背景区域.

c x11 image-processing transparent xlib

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

使用放置new []有什么问题?做

考虑下面的程序.它已从简单的案例中简化.除非删除Obj类中的虚析构函数,否则它将无法删除先前分配的内存.我不明白为什么程序输出中的两个地址不同,只有虚拟析构函数存在.

// GCC 4.4
#include <iostream>

using namespace std;

class Arena {
public:
    void* alloc(size_t s) {
        char* p = new char[s];
        cout << "Allocated memory address starts at: " << (void*)p << '\n';
        return p;
    }

    void free(void* p) {
        cout << "The memory to be deallocated starts at: " << p << '\n';
        delete [] static_cast<char*> (p); // the program fails here
    }
};

struct Obj {
    void* operator new[](size_t s, Arena& a) {
        return a.alloc(s);
    }

    virtual …
Run Code Online (Sandbox Code Playgroud)

c++ placement-new

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

是否可以通过这种方式销毁和重新创建对象?

可能重复:
我可以在C++中重新开始而不会再次失败吗?

考虑一下T* o = new(T())T,其中定义了一个拷贝构造函数.还假设表达式new使用默认值::operator new()

要重新使用为o分配的内存,而不是删除对象delete o,标准是否允许以下​​顺序: 

  1. o->~T()明确打电话
  2. 使用placement new在先前为o分配的内存上创建对象的副本:new(o)T(x)
  3. 当用o及其内存完成时,用它删除它 delete o

我也问这个,因为我不明白为什么std::map<T, V>(或它operator[]具体),例如,如果上述序列可以在没有这个要求的情况下工作,则需要T定义一个适当的赋值运算符.我怀疑地图是以这种方式设计的,因为operator=()复制构造函数可以有不同的语义,因为大多数时候它们只是以相同的方式实现.

c++ object-lifetime

7
推荐指数
0
解决办法
133
查看次数

streampos和pos_type,streamoff和off_type之间有什么区别?

之间有什么区别streampospos_type,streamoff并且off_type,除非他们被不同的定义.我应该用什么basic_stream<>::seek功能?

c++

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

为什么不搜索(0)清除流的eof状态?

我想知道是否以及为什么seekg(0)不应该清除eofbit流.我已经阅读了所有的流,因此EOF已经到达(但failbit尚未设置)并且想要返回seekg()到有效位置并再次读取一些字符.在这种情况下,seekg(0)似乎与该eofbit集合"工作" ,但是一旦我尝试从流中读取,就设置了failbit.这是逻辑,正确还是我的实施不好?我是否应该认识到这种情况并手动清除eofbit(如果未设置failbit)?

编辑:

读者提供的以下程序在我的实现中给出了不同的结果(mingw32-c ++.exe(TDM-2 mingw32)4.4.1):

#include <sstream>
#include <iostream>
#include <string>

int main() {
        std::istringstream foo("AAA");
        std::string a;
        foo >> a;
        std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
        foo.seekg(0);
        std::cout << foo.eof() << " " << foo.fail() << std::endl; // 0 0
        foo >> a;
        std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
        foo …
Run Code Online (Sandbox Code Playgroud)

c++ iostream

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

如何用内联asm编译这个程序?

我无法编译从教程中获取的程序.它应该打印"Hello World".

void main() 
{
    __asm__("jmp forward\n\t"
            "backward:\n\t"
            "popl   %esi\n\t"
            "movl   $4, %eax\n\t"
            "movl   $2, %ebx\n\t"
            "movl   %esi, %ecx\n\t"
            "movl   $12, %edx\n\t"
            "int    $0x80\n\t"
            "int3\n\t"
            "forward:\n\t"
            "call   backward\n\t"
            ".string \"Hello World\\n\""
           );
}
Run Code Online (Sandbox Code Playgroud)

gcc 4.7 在Linux下给我以下错误:

gcc hello.c -o hello
hello.c: Assembler messages:
hello.c:5: Error: invalid instruction suffix for `pop'
Run Code Online (Sandbox Code Playgroud)

还有一种方法可以避免为每一行指定双引号吗?

另外,我想知道如何修改程序以使用libc调用printf而不是kernel服务.

c x86 assembly gcc inline-assembly

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

了解std :: future :: then的延续

任何人都可以在C为例解释++之间有什么区别async([](){x(); y();})async([](){x();}).then([](){y();})?我的理解是,在后一种情况下,每个的xy将可能在不同的线程立即启动,只会阻塞(在各自的线程),如果get()是在未来作为输入传递调用。

c++ c++14

7
推荐指数
2
解决办法
3907
查看次数

通过REST API实现对长轮询的服务器端响应

假设您正在通过HTTP为服务器"房间"设计REST API,其中订阅客户端想要监视发生在房间中的公共事件(例如,新参与者加入房间,另一个人离开房间,等等......)提出长轮询请求.

从服务器端角度来看,实现此目的的最佳方法是什么,以便客户端不会错过连续轮询之间的任何事件?例如,服务器是否应该实现需要存在于队列中的事件队列,直到所有订户都获得它们为止?

是否有任何教程,示例,关于设计此类API的互联网理论以及从服务器角度考虑的所有事项?

rest http

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

这个模板定义有什么问题?

template <int N>
class myarray {
    typedef int Bitmap;
public:
    static Bitmap data[N];
};

template <int N> myarray<N>::Bitmap myarray<N>::data[N];
Run Code Online (Sandbox Code Playgroud)

错误:'myarray'之前的预期构造函数,析构函数或类型转换

c++ templates

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

从并发析构函数中停止 boost::asio::io_service::run()

谁能解释一下为什么这个程序没有终止(见评论)?

#include <boost/asio/io_service.hpp>
#include <boost/asio.hpp>
#include <memory>
#include <cstdio>
#include <iostream>
#include <future>

class Service {
public:
    ~Service() {
        std::cout << "Destroying...\n";
        io_service.post([this]() {
            std::cout << "clean and stop\n"; // does not get called
            // do some cleanup
            // ...
            io_service.stop();
            std::cout << "Bye!\n";
        });
        std::cout << "...destroyed\n"; // last printed line, blocks
    }

    void operator()() {
        io_service.run();
        std::cout << "run completed\n";
    }

private:
    boost::asio::io_service io_service;
    boost::asio::io_service::work work{io_service};
};

struct Test {
    void start() {
        f = std::async(std::launch::async, [this]() { …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

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