小编ven*_*rty的帖子

在C++中将派生类指针分配给基类指针

我有以下

class base
{
};

class derived : public base
{
  public:
   derived() {}
   void myFunc() { cout << "My derived function" << std::endl; }

};
Run Code Online (Sandbox Code Playgroud)

我现在有

base* pbase = new derived();
  pbase->myFunc();
Run Code Online (Sandbox Code Playgroud)

我收到错误 myFunc 不是 base 的成员函数。

如何避免这种情况?以及如何让 myFunc 被调用?

注意我应该让基类不包含任何功能,因为它是设计的一部分,上面的代码是大功能的一部分

c++

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

编译器优化"常量传播"是什么意思?

来自Scott Meyers的Effective C++:

template<typename T, std::size_t n>
class SquareMatrix: private SquareMatrixBase<T> {

public:

    SquareMatrix( ) 
     : SquareMatrixBase<T>(n, 0), 
       pData(new T[n*n]) 
    {
         this->setDataPtr(pData.get()); 
    } 

        ...
private:

    boost::scoped_array<T> pData;
};
Run Code Online (Sandbox Code Playgroud)

无论数据存储在何处,从膨胀的角度来看,关键结果是,现在很多 - 也许全部 - SquareMatrix的成员函数可以是对基类版本的简单内联调用,这些基类版本与所有其他具有相同类型的矩阵共享数据,无论其大小.同时,不同大小的SquareMatrix对象是不同的类型,所以即使例如SquareMatrix <double,5>和SquareMatrix <double,1 0>对象在SquareMatrixBase <double>中使用相同的成员函数,也没有机会将SquareMatrix <double,5>对象传递给期望SquareMatrix <double,1 0>的函数.很好,不是吗?

很好,是的,但不是免费的.具有硬连线的矩阵大小的反转版本可能比共享版本生成更好的代码,其中大小作为函数参数传递或存储在对象中.例如,在特定于大小的版本中,大小将是编译时常量,因此有资格进行常量传播等优化,包括将它们作为立即操作数折叠到生成的指令中.这不能在与大小无关的版本中完成.

在上一段的上述描述中,它被称为"因此有资格进行恒定传播等优化,包括将它们作为立即操作数折叠到生成的指令中".这个陈述是什么意思?请来解释一下.

谢谢!

c++ templates code-size

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

使用C++中的流写入文件

我想要一些文本输出到文件.我听说最好是流式传输数据而不是创建一个大字符串并输出它.目前我正在创建一个大字符串并输出到文件.请求提供有关如何使用C++流式传输数据和写入文件的示例代码.

谢谢!

c++

5
推荐指数
2
解决办法
2万
查看次数

C++ 异常和信号处理程序

我正在阅读Bjarne Stroustrup 的The Design and Evolution of C++。关于异常处理和异步信号,如下所述:

异常可以用来处理信号之类的事情吗?在大多数 C 环境中几乎可以肯定不是。问题是 C 使用了像 malloc 这样不可重入的函数。如果在 malloc 中间发生中断并导致异常,则无法阻止异常处理程序再次执行 malloc。

一个 C++ 实现,其中调用序列和整个运行时库是围绕可重入的要求设计的,这将使信号抛出异常成为可能

作者所说的“没有办法阻止异常处理程序再次执行malloc”是什么意思?使函数可重入如何使信号处理程序抛出异常成为可能?

c++ language-design exception signal-handling

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

匹配和完美匹配之间的区别

考虑n个人的集合M = {m1,m2,...,mn},以及n个女性的集合W = {w1,w2,...,wn}.设MXW表示形式(m,w)的所有可能有序对的集合,其中m属于M,w属于W.

匹配 S是一组有序对中,每个从MXW,条件是M的每个成员和W中的每个成员在大多数S.一对出现在属性

完美匹配 S1是与M的每个成员和W中的每个成员出现在S1恰好一对属性的匹配.

我很难理解上面关于匹配和完美匹配定义的陈述.

任何人都可以举例说明匹配和完美匹配以下示例.M = {m1,m2,m3},w = {w1,w2,w3}

感谢帮助

algorithm

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

看到TFS2010搁置的变化

我正在使用TFS 2010.我必须检查在签入之前被其他开发人员搁置的代码.我们如何才能在TFS2010中执行此操作,以便我可以进行更改和审核.谢谢!

tfs shelve

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

关于Windows和posix中的1个刻度

我在Windows下看到C++中的代码.

提到1个刻度等于100纳秒.这是针对Windows的吗?或者这是否是通用标准,如果它是标准的名称?其他操作系统也一样吗?

要求上述问题的原因我必须编写与平台无关的代码,如果是特定于Windows的话我必须为这部分代码添加#ifdef WIN32.

c++ windows timespan

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

比较下限中的函数

我有以下结构

    enum quality { good = 0, bad, uncertain };

    struct Value {
       int time;
       int value;
       quality qual;
    };

    class MyClass {

public:
    MyClass() {
        InsertValues();
    }

       void InsertValues();

       int GetLocationForTime(int time);

private:

    vector<Value> valueContainer;
};

void MyClass::InsertValues() {
    for(int num = 0; num < 5; num++) {
        Value temp;
        temp.time = num;
        temp.value = num+1;
        temp.qual = num % 2;
        valueContainer.push_back(temp);
    }
}


int MyClass::GetLocationForTime(int time)
{

   // How to use lower bound here.
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我遇到了很多编译错误.我想我在这里做错了我是STL编程的新手,请你纠正我的错误在哪里?这样做有好处吗? …

c++ stl

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

通过skiena理解乐透程序逻辑

我正在从以下位置阅读文章.这是文本片段表单文档.

链接

找到一套能保证获胜的最低票数并不是一件轻而易举的事.鉴于R中的P个结果将来自算命先生集,不难看出有NCP =(N/ P!)/(NP)!算命先生集中可能出现的P-子集可能出现在中奖票中.如果我们从算命先生中选择所有P子集W次并且任意填写剩余的RP时隙,则获得的票数集将至少具有每个P子集的W次并且保证我们W获胜.然而,这样的集合不需要是最小的集合,并且在大多数情况下不是.

我们从算命先生的承诺中知道其中一个P子集将出现在中奖票中.两个P子集的差异可能小于J个数.当出现这种情况时,据说子集相对于共享的J号重叠或相互覆盖,并且只有一个P子集必须在购买的票中.使用示例可以最好地说明这种现象.假设我们正在玩PICK-4 Lotto并需要一次2/4的胜利.因此R = 4,J = 2且W = 1.此外,我们假设算命先生从一组5个数字中预测3个数字(即P = 3和N = 5).如果所有P-subsets都是从算命套装中取出并任意填充以完成门票,那么我们将有一套十张门票,保证一次2/4获胜(见图1).然而,由于有两个数字重叠,因此也可以从此集合中排除某些票证.例如,子集{3,4,5}与{1,3,5}仅相差一个数字,并且在购买的票证中使用这两者都是浪费的.我们可能认为不包括{3,4,5}将允许丢失的可能性,但事实并非如此,因为如果{3,4,5}发生,我们在{1中将有'3'和'5', 3,5}我们买来要领奖!类似地,可以存在更多冗余P子集.最佳解决方案如图2所示.我们的彩票问题是从算命先生集中找到最小的P子集,通过将重叠次数保持在最小值来保证指定的获胜次数.

我的问题是跟随

  1. 正如作者所提到的"如果所有P-subsets都是从算命套装中取出并随意填写以完成门票,我们就会有一套十张票"因为在文章表中缺少任何人可以帮助我这里有什么10票?

  2. 在上面的例子中,如果1和3发生,如果我们没有选择{1,3,5}我们怎么能在这里获胜?

  3. 任何人都可以提出文章中缺少的图2吗?

谢谢!

algorithm

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

捕获内存分配异常

void newHandler() {
   cdebug << "memory allocation failure" << std::endl;
   throw std::bad_alloc();
}

int main() {
  std::set_new_handler(newHandler);
  // ...
}
Run Code Online (Sandbox Code Playgroud)

一旦newHandler被建立为我们的错误处理程序,它将在任何堆分配失败时被调用.关于错误处理程序的有趣之处在于它会被连续调用,直到内存分配成功,或者函数抛出错误.

我对上面文本的问题是,"直到内存分配成功,或者函数抛出错误"时,authore的意思是什么.在这种情况下,函数如何抛出错误?要求举例说明.

谢谢你的时间和帮助.

c++ exception-handling

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