小编era*_*ran的帖子

当涉及虚拟继承时,为什么不能使用static_cast进行向下转换?

请考虑以下代码:

struct Base {};
struct Derived : public virtual Base {};

void f()
{
    Base* b = new Derived;
    Derived* d = static_cast<Derived*>(b);
}
Run Code Online (Sandbox Code Playgroud)

这是标准([n3290: 5.2.9/2])禁止的,因此代码无法编译,因为Derived 实际上是继承自的Base.virtual从继承中删除使代码有效.

这条规则存在的技术原因是什么?

c++ virtual-inheritance downcast static-cast

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

为开源提供内部工具值得付出努力吗?

我知道这是一个普遍的问题,但我想听听其他人对我们案件的看法:

我在一家小公司工作.我们的主要开发工具是PowerBuilder,这是一个非常有限的IDE,社区不断缩小.我们已经创建了一些工具,我们在内部使用这些工具来解决某些需求.它们既没有经过适当的设计也没有经过适当的测试,并且没有生产质量.OTOH,他们确实拯救了我们很长一段时间,也可以帮助别人.我敢肯定其他公司也有同样的工具,并且想知道与他人分享这些工具有多么普遍.照我看来 -

专业人士:

  • 好业力
  • 更关注我们的网站
  • 也许从别人那里获得修复和改进

缺点:

  • 如果不投入更多开发,这些工具可能会让我们看起来很糟糕
  • 发布代码需要一些努力
  • 有些工具可能过于专业化,无法满足我们的需求
  • 鉴于社区不断缩小,整个努力可能会被忽视

您或您的公司是否曾经贡献过这样的工具,或者使用过其他人开发的工具?值得努力吗?

编辑:

对于那些多么奇怪的人,我想到的工具包括 -

  • 通过列出签出给当前用户或其他人的对象,备份签出的对象以及重构PBG,可以更轻松地使用SourceSafe的工具.
  • 一种在运行时识别PB控件的工具,就像Spy ++一样(需要目标应用程序的一些基础结构).
  • SQLite的PBNI包装器(进程内访问,无ODBC).
  • SQL客户端,文本测量工具等

powerbuilder open-source

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

OpenMP:嵌套并行化有什么好处?

根据我的理解,#pragma omp parallel它的变化基本上在许多并发线程中执行以下块,这对应于CPU的数量.当嵌套并行化时 - 并行为并行,并行函数内的并行函数等 - 内部并行化会发生什么?

我是OpenMP的新手,我想到的情况可能相当简单 - 将矢量与矩阵相乘.这是在两个嵌套的for循环中完成的.假设CPU的数量小于向量中的元素数量,那么尝试并行运行内部循环是否有任何好处?线程总数是否会大于CPU数量,还是内部循环会顺序执行?

c++ parallel-processing multithreading nested openmp

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

为什么将memory_order作为std :: atomic函数的运行时参数给出

std::atomic功能,诸如storeload采取一个std::memory_order参数.可以在运行时确定参数,就像任何其他函数参数一样.但是,实际值可能会影响编译期间代码的优化.考虑以下:

std::atomic<int> ai1, ai2;
int value = whatever;

void foo() {
    std::memory_order memOrd = getMemoryOrder();
    register int v = value; // load value from memory
    ai1.store(v, memOrd);   // dependency on v's value
    ai2.store(1, memOrd);   // no dependency. could this be move up?
}
Run Code Online (Sandbox Code Playgroud)

如果memOrd碰巧memory_order_relaxed,第二个商店可以安全地移动到第一个商店前面.这将在加载value和使用它之间增加一些额外的工作,这可能会阻止其他需要的停顿.但是,如果memOrdmemory_order_seq_cst,则不应该允许切换存储,因为如果设置为1 ai1,value则某些其他线程可能指望已经设置为ai2.

我想知道为什么内存顺序被定义为运行时参数而不是编译时间.在决定最佳内存操作语义之前,有人在运行时检查环境是否有任何理由?

c++ atomic memory-model c++11

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

Java监视器有多重?

假设我有一个包含数千个对象的数组,以及可能访问每个对象的少量线程.我想保护对其中一个对象方法的访问.最简单的方法是将该方法声明为synchronized.但是,这可能会导致创建数千个监视器,无论它们是以何种方式实现的.如果这是Win32,我永远不会创建数千个内核对象,如Mutex,但CRITICAL_SECTION 可能是合理的.我想知道Java的情况如何.鉴于争用的可能性很低,监视器的使用是否会超过他们所需的大量内存?在Java中使用这种低粒度同步的做法有多常见?

(显然有一些解决方法,例如使用更小的同步对象数组,可以使用一些哈希来访问.我不是在寻找一个实用的解决方案,我正在寻找一个洞察力).

java performance synchronization monitor

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

如何在加载类时JVM验证没有潜在的操作数堆栈溢出?

经过一些演示,我遇到了以下声明:当JVM加载一个类时,它可以分析其内容并确保操作数堆栈没有溢出或下溢.我发现很多来源都提出了相同的主张,但没有说明它是如何完成的.

我不清楚如何使用静态分析进行此类验证.假设我有一个(恶意)方法,它可以获得一些值作为参数,并使用它来执行一系列弹出.在加载时,迭代次数是未知的,因为它取决于方法调用者给出的参数.因此,在我看来,只有在运行时才能确定是否会出现下溢.我在这里错过了什么?

java stack-overflow verification jvm

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

Boost上下文库

在最新版本的Boost中出现了新的库Context.

在阅读文档后,我了解它的作用,但几乎看不到用例.使用此库有什么好处?您可以建议使用哪些任务?

c++ boost boost-context

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

是否有更好的GUI替换WinDBG?

我偶尔会使用WinDBG来分析生产环境中无法安装VS的问题.毫无疑问,这是一个非常强大的工具,但使用它有点烦人.即使产品经常更新,其GUI也会回到Win95天左右,因此其可用性也是如此.必须以我想要的方式对待GUI来布局窗口,并且必须记住所有这些文本命令,这对于现代桌面应用程序而言是非常低的标准.

AFAIK,WinDBG几乎建立在CDB之上,CDB是一个命令行调试器.因此,构建一个现代的GUI包装器来取代现有的恐龙并不难.有没有人这样做过?我是唯一对WinDBG有这种复杂感情的人吗?

(顺便说一句,我知道我可以创建一个转储并将其带回到我拥有VS的地方,但我有时必须调试64位进程,而且我没有64位开发机器.可悲,但是真的)

debugging user-interface windbg

12
推荐指数
2
解决办法
4607
查看次数

对我们的可执行文件进行数字签名有多重要?

我们制作了一个内容管理系统.它是一个基于数据库的系统,仅供企业和组织使用,不能从Internet下载.也就是说,它不是某种人可能偶然发现的软件,不知道它是什么以及它是否安全.在20多年的时间里,我们的系统正在销售,其可执行文件从未经过数字签名.是时候开始签名吗?

对于初学者,我可以想到一些优点和缺点:

  • Pro:如果使用Verisign证书,则可以使用Windows错误报告
  • Pro:当Windows Vista和Windows 7显示其中一个令人讨厌的UAC消息时,签名的应用程序会更好一些
  • 骗局:证书需要花钱.不是很多,但如果它们没用,那就太多了
  • Con:签名有一些维护开销,我不知道多少.

executable code-signing digital-signature

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

可以抛出具有私有拷贝构造函数的对象吗?

我遇到了一些我不清楚的异常问题.在C++中,当抛出一个对象时,它首先被复制到一个临时对象,然后临时对象被传递给捕获代码.该副本涉及使用对象的类复制构造函数.AFAIK,这意味着如果一个类有一个私有拷贝构造函数,它就不能用作异常.但是,在VS2010中,以下代码编译并运行:

class Except
{
    Except(const Except& other) { i = 2; }
public:
    int i;
    Except() : i(1) {}
};

int main()
{
    try
    {
        Except ex1;
        throw ex1;          // private copy constructor is invoked
    }
    catch (Except& ex2)
    {
        assert(ex2.i == 2); // assert doesn't yell - ex2.i is indeed 2
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这合法吗?

c++ private exception copy-constructor visual-studio-2010

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