我有一个使用嵌套类的类,并且想要使用嵌套类operator<<来定义上层类中的operator<< 。 以下是我的代码的样子: #include <memory> #include <iostream> template<typename T> struct classA { struct classB { template<typename U> friend inline std::ostream& operator<< (std::ostream &out, const typename classA<U>::classB &b); }; classB root; template<typename U> friend std::ostream& operator<< (std::ostream &out, const classA<U> &tree); }; template<typename T> inline std::ostream& operator<< (std::ostream &out, const classA<T> &tree) { out << tree.root; […]
我读过很多伪随机数生成器需要许多样例才能被“预热”。 这是什么时候使用std :: random_device种子std :: mt19937,或者我们可以期望它已经准备好后,build设? 有问题的代码: #include <random> std::random_device rd; std::mt19937 gen(rd());
我总是觉得std::unique_ptr与使用原始指针相比没有开销。 但是,编译下面的代码 #include <memory> void raw_pointer() { int* p = new int[100]; delete[] p; } void smart_pointer() { auto p = std::make_unique<int[]>(100); } 用g++ -std=c++14 -O3产生下面的程序集: raw_pointer(): sub rsp, 8 mov edi, 400 call operator new[](unsigned long) add rsp, 8 mov rdi, rax jmp operator delete[](void*) smart_pointer(): sub rsp, 8 mov edi, 400 call operator […]
我有一个用C / C ++编写的multithreadingLinux应用程序。 我select了我的线程名称 。 为了帮助debugging,我希望这些名字在GDB,“top”等中可见。这是可能的,如果是的话,怎么样? (有足够的理由知道线程名称,现在我想知道哪个线程占用了50%的CPU(由'top'报告),而且在debugging时我经常需要切换到另一个线程 – 目前我必须做“ thread apply all bt ”,然后通过backtrace输出页面来查找正确的线程)。 Windows解决scheme在这里 ; 什么是Linux的?
你必须通过删除新的返回相同的指针,或者你可以传递一个指针到一个基types的指针? 例如: class Base { public: virtual ~Base(); … }; class IFoo { public: virtual ~IFoo() {} virtual void DoSomething() = 0; }; class Bar : public Base, public IFoo { public: virtual ~Bar(); void DoSomething(); … }; Bar * pBar = new Bar; IFoo * pFoo = pBar; delete pFoo; 当然这大大简化了。 我真正想要做的是创build一个充满boost :: shared_ptr的容器,并将其传递给一些代码,当它完成时将它从容器中删除。 […]
我试图创build一个函数,可以创build一个操作,增加任何整数传入英寸然而,我的第一次尝试是给我一个错误“不能在一个匿名方法体内使用ref或out参数”。 public static class IntEx { public static Action CreateIncrementer(ref int reference) { return () => { reference += 1; }; } } 我明白为什么编译器不喜欢这个,但我想有一个优雅的方式来提供一个很好的增量工厂,可以指向任何整数。 我看到要做到这一点的唯一方法就像下面这样: public static class IntEx { public static Action CreateIncrementer(Func<int> getter, Action<int> setter) { return () => setter(getter() + 1); } } 但是,这对于主叫方来说当然是一种痛苦。 要求调用者创build两个lambdaexpression式,而不是只传入一个引用。 有没有更优雅的方式来提供这种function,或者我将只需要住两个lambda选项?
我看到一些关于在C中实现GC的post,有人说这是不可能的,因为C是弱types的。 我想知道如何在C ++中实现GC。 我想知道如何做到这一点。 非常感谢你! 这是我朋友告诉我的彭博采访问题。 那个时候他做得很糟糕。 我们想知道你的想法。
我正在做一个aproximate程序,我试图用很长的时间,但它不工作。 这是代码 #include<stdio.h> #include<math.h> typedef long long num; main(){ num pi; pi=0; num e, n; scanf("%d", &n); for(e=0; 1;e++){ pi += ((pow((-1.0),e))/(2.0*e+1.0)); if(e%n==0) printf("%15lld -> %1.16lld\n",e, 4*pi); //printf("%lld\n",4*pi); } }
你会如何将相当大的(> 300K),相当成熟的C代码转换为C ++? CI所考虑的types被分割成大致对应于模块的文件(即,比典型的基于OO类的分解更小的粒度),使用内部链接来代替私人function和数据,以及用于公共function和数据的外部链接。 全局variables被广泛用于模块之间的通信。 有一个非常广泛的集成testing套件可用,但没有单位(即模块)级别的testing。 我想到一个总的策略: 在C ++的C子集中编译所有东西,并使其工作。 将模块转换为巨大的类,以便所有的交叉引用都以类名称作为范围,但将所有函数和数据作为静态成员,并使其工作。 通过适当的构造函数和初始化的交叉引用将巨大的类转换为实例; 用适当的间接访问replace静态成员访问; 并得到那个工作。 现在,将项目作为一个不适当的OO应用程序来处理,然后编写unit testing,在依赖关系易于处理的地方进行分解,然后将其分解成不同的类。 这里的目标是在每次转换时从一个工作程序转到另一个工作程序。 显然,这将是相当多的工作。 这种翻译有没有案例研究/战争故事? 替代策略? 其他有用的build议? 注1:该程序是一个编译器,可能数以百万计的其他程序依赖于其行为不变,所以批量重写几乎不是一个选项。 注2:来源近20岁,每年可能有30%的代码stream失(线路修改+增加/以前的总线)。 换句话说,它被大量维护和扩展。 因此,其中一个目标是提高可信度。 [为了这个问题,假定C ++的转换是强制性的,而把它留在C中不是一个选项。 增加这个条件的意思就是去掉“把它留在C中”的答案。]
可能重复: 如何阻止Visual Studio在块注释中自动插入星号? 在Visual Studio中添加多行注释时,会自动在注释块内的一个新行(在回车)的开头放置一个星号(*)。 我个人认为这是一个麻烦。 有谁知道如何禁用它? 谢谢。