草庐IT

调用模板化内部类静态成员函数的 C++ 语法?

我有一些模板代码可以在VC9(MicrosoftVisualC++2008)中正常编译,但不能在GCC4.2(在Mac上)中编译。我想知道我是否缺少一些语法魔法。下面我有一个精简的例子来证明我的错误。抱歉,如果这个示例看起来毫无意义,我已尽可能删除以隔离此错误。特别是我有一个模板类S,它有一个内部类R,它也是一个模板类。从顶级模板函数foo,我试图调用R::append,它是R的静态成员函数:templatestructS{templateS&append(constT&){return*this;}templatestructR{templatestaticS&append(S&s,

c++ - main 在 pthread 之后不继续

我使用的是Ubuntu10.10,Code::Blocks和GCC4.2。我写过这样的代码:#include#include#includeusingnamespacestd;void*thread1proc(void*param){while(true)coutMain开始,创建线程。但是(对我来说)奇怪的是main没有继续运行。我希望在屏幕上和程序结束时看到“你好”消息。因为在Windows中,在Delphi中它对我很有效。如果“main”也是一个线程,为什么它不继续运行呢?是关于POSIX线程的吗?谢谢。 最佳答案 pthre

c++ - 手动对象构造函数调用

能否请您告诉我是否可以手动调用对象构造函数?我知道这是错误的,我永远不会在自己的代码中做这样的事情,我知道我可以通过创建和调用初始化函数来解决这个问题,但问题是我偶然发现了一个有数千行代码的情况对象及其父类的构造函数...classMyClass(){MyClass(){}virtual~MyClass();voidreset(){this->~MyClass();this->MyClass::MyClass();//error:InvaliduseofMyClass}}; 最佳答案 您仍然可以将构造/析构移动到单独的函数中并直接调

c++ - CLOCKS_PER_SEC 与 std::clock() 的结果不匹配

我正在使用以下短程序来测试std::clock():#include#includeintmain(){std::clock_tBegin=std::clock();intDummy;std::cin>>Dummy;std::clock_tEnd=std::clock();std::cout但是,在等待几秒钟输入“虚拟”值后,我得到以下输出:CLOCKS_PER_SEC:1000000Begin:13504End:13604Difference:100这显然没有多大意义。无论我等多久,差异总是在100左右。我错过了什么?有没有我忘记包含的标题?我正在使用带有GCC4.2的Xcode。

没有 GCC 编译器警告的 C++11 变量缩小

缩小的概念似乎很简单。但是,有人可以解释为什么下面的某些代码会导致“缩小”编译器错误而其他代码不会吗?这段代码会产生预期的错误:constexprinta=255;unsignedcharb=a;//OKunsignedcharc=a+1;//Error...expected此代码不会产生错误,但可能没问题:intd=256;unsignedchare=d;//MaybeOKbecause'd'isnotconstexpr这段代码应该会产生错误(除非我遗漏了什么):intf=42.0;//MaybeOKbecausenofractionalpartintg=42.1;//OK...sh

c++ - 为什么我没有收到此代码的段错误? (总线错误)

我的代码中有一个像这样的错误。chardesc[25];charname[20];charaddress[20];sprintf(desc,"%s%s",name,address);理想情况下,这应该会导致段错误。但是,我看到这给出了一个总线错误。维基百科按照“总线错误”的顺序说了一些事情,当程序试图访问未对齐的内存位置时,或者当您尝试访问不存在或不允许的物理(非虚拟)内存位置时。'上述语句的第二部分听起来类似于段错误。所以我的问题是,你什么时候得到SIGBUS,什么时候得到SIGSEGV?编辑:-不少人提到了上下文。我不确定需要什么上下文,但这是一个缓冲区溢出,位于一个静态类函数中,

c++ - 用户定义类型的 vector

尝试编译这段代码时:#include#includeusingnamespacestd;classTest{inta;public:Test(intpa):a(pa){}voidprint(){std::coutvet;vet.push_back(&t);return0;}gcc4.4.5-8报告各种错误,开始于:Infileincludedfrom/usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h:34,from/usr/include/c++/4.4/bits/allocator.h:48,from/usr/include

c++ - 微小的 SSE addpd 循环比 AMD Phenom II 上的标量稍慢?

是的,我读了SIMDcoderunsslowerthanscalarcode.不,这不是真正的重复。我使用二维数学已有一段时间了,并且正在将我的代码库从C移植到C++。我在使用C时遇到了一些问题,这意味着我确实需要多态性,但那是另一回事了。不管怎样,我之前考虑过这个,但它提供了一个使用2Dvector类的绝好机会,包括常见数学运算的SSE实现。是的,我知道那里有图书馆,但我想自己尝试一下以了解发生了什么,而且我没有使用比+=更复杂的东西。.我的实现是通过,用一个union{__m128dss;struct{doublex;doubley;}}SSE似乎很慢,所以我查看了它生成的ASM输

c++ - 如何将 C++ 共享库与 gcc 链接

我看到了一个带有C++共享库的GCC链接,但我无法自己复制它。所以首先我创建了一个带有测试函数的C++库:g++-shared-olibtest.sotest.c然后我有一个测试主函数,它调用库函数并像这样编译它gcc-oprog.outmain.c-L.-ltest然后我收到错误undefinedreferenceto'testfunc'我认为这是由库中的不同引用引起的...C将函数命名为testfunc,而C++将函数命名为[somestuff]__testfunc[maybeagainsomestuff]。我也试过用gcc-oprog.outmain.c-l:libtest.so

c++ - 使用快速排序对可能包含无穷大的容器进行排序是否安全?

我已经意识到,为了快速排序,所有无穷大都必须相等。换句话说,这样的标准是不够的:classEntity{public:floatvalue()const;boolvalueIsInfinite()const;};classCriterium{booloperator()(Entityleft,Entityright)const{if(left.valueIsInfinite())returnfalse;returnleft.value()container;qSort此排序失败,因为根据标准并非所有无穷大都相等。不等式取决于实体进入运算符的顺序。我发现,这样的排序失败了。我需要这样的东