小编Jav*_*eta的帖子

为什么函数对象应该是值传递的

我刚刚阅读了经典书籍"Effective C++,3rd Edition",在第20项中,作者得出结论,内置类型,STL迭代器和函数对象类型更适合于传值.我完全理解内置函数和迭代器类型的原因,但为什么函数对象应该是值传递,因为我们知道它仍然是类类型的?

c++ pass-by-value function-object

19
推荐指数
2
解决办法
1655
查看次数

C++构造函数初始化列表抛出异常

我有以下代码的问题.正如我们所看到的,我已经处理了A的构造函数在C的构造函数中抛出的异常,为什么我还要在main函数中再次捕获并处理异常呢?

#include <iostream>

class WException : public std::exception
{
public:
    WException( const char* info ) : std::exception(info){}
};

class A
{
public:
    A( int a ) : a(a) 
    {
        std::cout << "A's constructor run." << std::endl;
        throw WException("A constructor throw exception.");
    }

private:
    int a;
};

class B
{
public:
    B( int b ) : b(b) 
    {
        std::cout << "B's constructor body run." << std::endl;
        throw WException("B constructor throw exception");
    }

private:
    int b;
};

class C : public A, …
Run Code Online (Sandbox Code Playgroud)

c++ constructor exception list initializer

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

使用 x86 程序集的信号量实现

我对信号量实现方案很感兴趣,我了解到在x86中,我们可以使用“锁前缀”来实现原子操作,我想用它来实现互斥锁,我知道C++ 11现在有标准互斥锁,但我想实现我自己的。这是我的代码:

#include <iostream>
#include <thread>
#include <vector>

struct Semaphore
{
private:
    int s;
public:
    Semaphore( int s ) : s(s){}
    void wait()
    {
        int *p = &s;
        _asm
        {
            mov eax, p
            lock dec DWORD PTR [eax]
    begin : mov ebx, DWORD PTR [eax]
            cmp ebx, 0
            jl begin
        };
    }

    void signal()
    {
        int *p = &s;
        _asm
        {
            mov eax, p
            lock inc DWORD PTR [eax]
        };
    }
} s(1);

void print()
{
    s.wait();
    std::cout << "Print …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency assembly operating-system semaphore

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

给出两个数字的XOR和SUM.如何找到这些数字?

给出两个数字的XOR和SUM.如何找到这些数字?例如,x = a + b,y = a ^ b; 如果给出x,y,如何获得a,b?如果不能,给出原因.

math bit-manipulation bitwise-operators bitwise-xor

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

双链表找到最接近平均值的元素

有一个排序的双链表(C++ STL std :: list),例如"1,1,2,3,4,5,6",以及如何找到最接近列表平均值的元素通过扫描一次?(最接近平均22/7的元素是3)

algorithm

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

C ++自定义放置新和放置删除调用

我想定义自己的新展示位置和删除展示位置(采用额外的参数),我发现我可以正确调用展示位置,而无法访问展示位置删除。谁能告诉我我定义的展示位置删除不正确还是调用不正确?

class A
{
public:
    A( int a ) : a(a){}

    static void* operator new( std::size_t, int ); // the placement new
    static void operator delete( void*, int )throw(); // the corresponding placement delete
private:
    int a;
};

void* A::operator new( std::size_t size, int n )
{
    std::cout << "size: " << size << "  " << "n: " << n << std::endl;
    return ::operator new(size);
}

void A::operator delete( void* p, int n )throw()
{
    std::cout << "n: " …
Run Code Online (Sandbox Code Playgroud)

c++ placement-new placement

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