小编and*_*ykx的帖子

使用断言或例外通过合同设计?

通过合同编程时,函数或方法首先检查其前提是否已满足,然后才开始履行其职责,对吗?两个最重要的方式做这些检查是通过assertexception.

  1. 断言仅在调试模式下失败.确保(单元)测试所有单独的合同前提条件以确定它们是否确实失败是至关重要的.
  2. 在调试和释放模式下异常失败.这样做的好处是,测试的调试行为与发布行为相同,但它会导致运行时性能下降.

你觉得哪一个更好?

请参阅此处的相关问题

assert design-by-contract exception

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

在C++中使用接口的性能损失?

在C++中使用接口(抽象基类)时是否存在运行时性能损失?

c++ performance abstract-class virtual-functions

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

如何对伪随机数发生器进行单元测试?

我有一个伪随机数生成器(PRNG)类,我想进行单元测试.有两种方法:

  1. 编写一个测试用例,其中包含大量样本并测试它们是否正确分布.这种方法可能会导致测试用例的执行时间相当长;
  2. 手动计算一小部分样本,并验证PRNG算法是否重现它.这种方法可能导致在不被注意的情况下生成非随机序列;

我会说第一种方法不是真正的单元测试,因为它不执行发生器的白盒测试,但另一方面它正确地测试了类的责任.第二种方法更像是一个真正的单元测试,侧重于算法,但它没有提供足够的证据来证明该类是否履行其职责.

您更喜欢哪种方法?为什么?


random unit-testing

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

为什么模态/无模式对话框称为模态/无模式?

我总是很难记住模态或无模式对话框是否是应用程序其他部分中的阻塞操作.

有谁知道为什么他们被这样称呼?

user-interface modal-dialog modeless

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

将vector <Derived*>转换为需要向量<Base*>的函数

考虑这些课程.

class Base
{
   ...
};

class Derived : public Base
{
   ...
};
Run Code Online (Sandbox Code Playgroud)

这个功能

void BaseFoo( std::vector<Base*>vec )
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

最后我的矢量

std::vector<Derived*>derived;
Run Code Online (Sandbox Code Playgroud)

我想传递derived给函数BaseFoo,但编译器不允许我.如何在不将整个矢量复制到std::vector<Base*>?的情况下解决这个问题?

c++ stl vector covariance

26
推荐指数
4
解决办法
7569
查看次数

如何确定Qt在运行时运行的平台?

是否有(Qt)方法来确定Qt应用程序在运行时运行的平台?

qt cross-platform qt4

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

多个QMainWindow实例?

QMainWindow是Qt应用程序中的主窗口.所以通常你只有一个,但是QMainWindow你的应用程序中可能有多个实例吗?

我正在努力将基于Qt的GUI应用程序B集成到另一个基于Qt的GUI应用程序A中.这两个应用程序都有一个QMainWindow,我正在考虑作为第一步创建一个QMainWindowQMainWindows的选项卡.这样,它可以让我专注于将GUI B的后端连接到A的后端,而无需在用户界面本身中更改任何内容.这是一种可行的方法,还是您有其他建议?

c++ qt qmainwindow

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

我应该为每个功能/方法编写多少单元测试?

您是否为每个功能/方法编写一个测试,在测试中进行多次检查,或者对每个检查进行测试?

unit-testing

23
推荐指数
3
解决办法
9845
查看次数

三角矩阵系数的索引数算法

我认为这一定很简单,但我说得不对劲......

我有一个MxM三角矩阵,其系数逐行存储在矢量中.例如:

M =   [ m00 m01 m02 m03 ] 
      [     m11 m12 m13 ]
      [         m22 m23 ]
      [             m33 ]
Run Code Online (Sandbox Code Playgroud)

存储为

coef[ m00 m01 m02 m03 m11 m12 m13 m22 m23 m33 ]
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种非递归算法,它给出了矩阵大小M和系数数组索引i

unsigned int row_index(i,M)
Run Code Online (Sandbox Code Playgroud)

unsigned int column_index(i,M)
Run Code Online (Sandbox Code Playgroud)

它所指的矩阵元素.所以 row_index(9,4) == 3,column_index(7,4) == 2等等.如果指数计数是从零开始.

编辑:已经给出了几个使用迭代的回复.有谁知道代数表达式?

algorithm

23
推荐指数
3
解决办法
8436
查看次数

如何用非平凡的初始值填充向量?

我知道如何使用非平凡的初始值填充std :: vector,例如序列号:

void IndexArray( unsigned int length, std::vector<unsigned int>& v )
{
    v.resize(length);
    for ( unsigned int i = 0; i < length; ++i )
    {
        v[i] = i;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这是一个for循环.有没有一种优雅的方法来使用stl功能(而不是使用Boost)使用更少的代码行?

c++ stl

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