小编Man*_*ish的帖子

什么时候在C++中调用模板类的静态成员的构造函数?

关于何时调用普通类的静态成员的构造函数,有大量信息.但是,我看到一些关于模板类的奇怪行为.

以下程序的输出应该是什么?(注意我使用printf来避免任何静态初始化命令与std :: cout的混淆并发症.)

#include <iostream>

class B {
public:
  B(const std::string &s) { printf("Hello I am B from %s\n", s.c_str()); }
};

template<typename T>
class Atempl {
public:
  static B b_;
};

class A {
public:
  static B b_;
};

template<typename T>
B Atempl<T>::b_("Atempl");
B A::b_("A");

class C : public Atempl<int> {
};

int main(int argc, const char *argv[]) {
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为输出应该是:

Hello I am B from A
Hello I am B from Atempl
Run Code Online (Sandbox Code Playgroud)

但是使用FreeBSD 7.3上的g ++ …

c++ templates constructor static-members

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

如果异常将由特定的catch块处理,如何使C++抛出转储核心

如果抛出的异常将由某个catch块处理,有没有办法在C++中抛出核心来抛出核心?当异常达到顶级时,我想要与g ++相似的东西.

例如,我想要这样的事情:

try {
  bar();
  try {
    foo();
  } catch(...) {
#  pragma dump_at_throw_site
  }
} catch(...) {
  std::cerr << "There was a problem" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这样,如果从foo()或其被调用者到达foo()的调用站点抛出的任何异常将导致在throw站点进行核心转储,那么可以看到是谁抛出了使其达到此级别的异常.

另一方面,bar()抛出的异常将被正常处理.

c++ debugging exception-handling

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