小编Nav*_*een的帖子

分析编译时间

我有一个C++代码,我正在使用VC7进行编译,它需要花费大量的时间来构建它.有什么方法可以描述它,并找出为什么需要时间来构建?

c++ build

6
推荐指数
2
解决办法
2432
查看次数

从Derived*转换为Base*&

我试图通过将引用传递给指针而不是指向指针的指针来回答这里提到的问题,如下所示:

class Parent 
{
};

class Child : public Parent 
{
};

void RemoveObj(Parent*& pObj)
{
    delete pObj;
    pObj = NULL;
}

int main()
{
    Parent* pPObj = new Parent;
    Child*  pCObj = new Child;
    pPObj = new Parent();
    pCObj = new Child();



    RemoveObj(pPObj);
    RemoveObj(pCObj); // This is line 32
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

但是这会在第32行产生以下编译器错误:

错误C2664:'RemoveObj':无法将参数1从'Child*'转换为'Parent*&'

我同意不允许从Child**转换为Parent**.但为什么这种转换也不允许?

c++ polymorphism compilation

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

向量中元素的默认构造

在阅读这个问题的答案时,我对向量中对象的默认构造产生了疑问.为了测试它,我编写了以下测试代码:

struct Test
{
    int m_n;

    Test(); 

    Test(const Test& t);

    Test& operator=(const Test& t);
};

Test::Test() : m_n(0)
{
}

Test::Test(const Test& t)
{
    m_n = t.m_n;
}

Test& Test::operator =(const Test& t)
{
    m_n = t.m_n;
    return *this;
}


int main(int argc,char *argv[])
{
    std::vector<Test> a(10);
    for(int i = 0; i < a.size(); ++i)
    {
        cout<<a[i].m_n<<"\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,在创建矢量对象时会调用Test结构默认构造函数.但是我无法理解的是STL如何初始化对象我创建了一个基本数据类型的向量,例如int的向量,因为它有默认的构造函数?即向量中的所有整数如何具有值0?不应该是垃圾吗?

c++ stl default-constructor built-in-types

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

使用类成员函数作为回调

在PortAudio的C++绑定中,有一个MemFunCallBackStream构造函数,可以调用为:

portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord, 
                                                     *AnInstanceOfMyClass,
                                                     &MyClass::MemberFunction);
Run Code Online (Sandbox Code Playgroud)

其中最后一个参数是回调函数.但是,如果不在参数编译器上使用&运算符,则会失败 但据我所知,参数在获取函数指针中使用的函数地址时是可以省略的.这与C回调函数和ptr有什么不同.到了.句法?

c++ callback

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

对unsigned int进行一元操作的编译器警告

我有这个示例代码生成以下警告(带SP1的VS2008编译器):

警告C4146:一元减号运算符应用于无符号类型,结果仍未签名

码:

void f(int n)
{
}

int main()
{
    unsigned int n1 = 9;
    f(-n1);
}
Run Code Online (Sandbox Code Playgroud)

但是因为函数f正在将它的参数作为一个int不应该编译而没有任何警告吗?

c++ unsigned compiler-warnings

6
推荐指数
2
解决办法
4929
查看次数

这种创建静态实例线程的方法是否安全?

我有以下示例C++代码:

class Factory
{
public:
    static Factory& createInstance()
    {
        static Factory fac;
        return fac;
    }

private:
    Factory() 
    {
        //Does something non-trivial
    }
};
Run Code Online (Sandbox Code Playgroud)

让我们假设createInstance两个线程同时调用它.那么生成的对象是否会正确创建?如果第二个线程createInstance在第一个线程位于构造函数中时进入调用会发生什么Factory

c++ static-members thread-safety

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

防止两个类从具有相同模板参数的基类继承

我有一个类,假设是一个基类:

template<int ID>
class BaseClass { ... };
Run Code Online (Sandbox Code Playgroud)

如果两个类尝试使用相同的ID值继承此基类,我怎么能出现编译时错误.那就是 - 这个代码可以起作用:

class A : BaseClass<1> { ... }
class B : BaseClass<2> { ... }
Run Code Online (Sandbox Code Playgroud)

但是这段代码假设会导致错误:

class A : BaseClass<1> { ... }
class B : BaseClass<1> { ... }
Run Code Online (Sandbox Code Playgroud)

怎么能实现这个目标?BOOST_STATIC_ASSERT有帮助吗?

c++ inheritance templates boost assert

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

在PowerShell中将输出转换为HTML格式

我正在学习PowerShell.在我的实验中,我使用了以下命令:

PS C:\Windows\system32> gci -path C:\windows\  | Where-Object{$_.LastWriteTime -
gt "01-04-2011"} | Format-List -property Fullname | ConvertTo-Html | out-file E:
\PowerShell\Out.html
Run Code Online (Sandbox Code Playgroud)

我期望输出像控制台中显示的输出(如:FullName:C:\ Windows ...).但是当我打开Out.html时,它有一些奇怪的东西,比如:

ClassId2e4f51ef21dd47e pageHeaderEntry pageFooterEntry autosizeInfo shapeInfo groupingEntry

我在这里错过了什么?

powershell

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

是否有在Apache C模块上运行单元测试的框架?

我即将对现有的Apache C模块进行一些更改,以修复一些可能的安全漏洞和一般的不良做法.但是,代码的功能必须保持不变(除非修复错误).标准回归测试的东西似乎是有序的.我想知道是否有人知道在代码中运行一些回归单元测试的好方法.我正在考虑使用C-Unit,但是对于Apache APR和状态结构的所有关系,我想知道是否有一种很好的方法来测试它.是否有任何预先构建的框架可以与C-unit一起使用?

谢谢

彼得

c apache testing unit-testing cunit

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

使用重载的展示位置new/delete来增强shared_ptr

我正在使用boost shared_ptr和我自己的内存管理器这样的(剥离示例,我希望它没有错误):

class MemoryManager
{
public:
    /** Allocate some memory.*/
    inline void* allocate(size_t nbytes)
    {
        return malloc(nbytes);
    }
    /** Remove memory agian.*/
    inline void deallocate(void* p)
    {
        free(p);
    }


};

MemoryManager globalMM;

// New operators
inline void* operator new(size_t nbytes, ogl2d::MemoryManagerImpl& mm)
{
    return globalMM.allocate(nbytes);
}

// Corresponding delete operators
inline void operator delete(void *p, ogl2d::MemoryManagerImpl& mm)
{
    globalMM.deallocate(p);
}

/** Class for smart pointers, to ensure
     *  correct deletion by the memory manger.*/
class Deleter
{
public:
    void operator()(void …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management placement-new shared-ptr

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