小编Col*_*lin的帖子

如何使用移动构造函数获取g ++来编译c ++ 11代码?

我似乎无法使用g ++来编译使用移动构造函数的c ++ 11代码.我一直收到这个错误:

collin@Serenity:~/Projects/arraylib$ g++ ./t2.cpp
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’
Run Code Online (Sandbox Code Playgroud)

我正在编写的程序与此完全不同,但我将其修改为看起来应该绝对可行的部分,但仍会触发错误:

#include <iostream>

using namespace std;

class Blarg {
    public:
        Blarg () {};
        Blarg (const Blarg& original) {}; /* Copy constructor */
        Blarg (Blarg&& original) {}; /* Move constructor */
};

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

谁能告诉我我做错了什么?相反,如何解决它?

这是我的gcc版本:

gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2
Run Code Online (Sandbox Code Playgroud)

c++ g++ move-constructor c++11

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

如何编写可在C++程序中使用的C头文件?

可能重复:
如何检查(通过预处理器)C源文件是否正在编译为C++代码

我正在尝试找到一个标准的宏来测试头文件是编译为C还是C++.这样做的目的是标题可以包含在C或C++代码中,并且必须根据具体情况略有不同.特别:

在C中,我需要这个代码:

extern size_t insert (const char*);
Run Code Online (Sandbox Code Playgroud)

在C++中,我需要这个代码:

extern "C" size_t insert (const char*);
Run Code Online (Sandbox Code Playgroud)

另外,有没有办法避免在标题中的每个声明周围放置#ifdef?

c c++ macros

13
推荐指数
3
解决办法
870
查看次数

找出当前平台上最大的本机整数类型

我遇到的问题是创建一种大整数库.我想让它既跨平台又尽可能快.这意味着我应该尝试使用系统本机支持的大型数据类型进行数学运算.

我实际上不想知道我是在编译32位还是64位系统; 我需要的是根据可用的最大值创建64位或32位或任何位整数的方法.我会使用sizeof来表现不同,具体取决于它是什么.

以下是一些可能的解决方案及其问题:

使用sizeof(void*):这给出了指向内存的指针的大小.有可能(尽管不太可能)系统可能具有更大的内存指针,而不是能够进行数学运算,反之亦然.

总是使用long:虽然在几个平台上确实长整数是4字节或8字节,具体取决于体系结构(我的系统就是这样一个例子),但是一些编译器甚至在64位系统上实现了4个字节的长整数.

总是使用long long:在许多32位系统上,这是一个64位整数,可能效率不高(虽然可能比我编写的代码更有效).这个问题的真正问题在于某些架构(例如为我的mp3播放器供电的架构)可能根本不支持它.

要强调的是,我的代码并不关心整数的实际大小一旦被选中(它依赖于sizeof()来处理大小重要的事情).我只是想让它选择整数的类型,这将导致我的代码最有效.

c int 64-bit 32-bit 32bit-64bit

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

C++标准库和Boehm垃圾收集器

我想开发一个多线程C++应用程序(最终大部分C++代码将由应用程序本身生成,可以被视为高级域特定语言)在Linux/AMD64/Debian上使用GCC 4.6(和可能是最新的C++ 11标准).

我真的想在我的所有堆分配中使用Boehm的保守垃圾收集器,因为我想分配new(GC)并且从不打扰delete.我假设Boehm的GC工作得很好.

使用(而不是C)C++的主要动机是在所有的算法和集合std::map... std::vector由C++标准库提供.

Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc/gc_allocator.h中).

我应该重新定义operator ::new为Boehm吗?

或者我应该使用所有集合模板,并将显式的allocator模板参数设置为某些gc_allocator?我不完全理解第二个模板参数(分配器)对std :: vector的作用?它是用来分配矢量内部数据,还是分配每个单独的元素?

什么是std::string-s?如何使他们的数据GC分配?我应该使用basic_string模板gc_allocator吗?有没有办法让内部数组的char分配GC_malloc_atomicGC_malloc

或者您是否建议不要将Boehm GC与g ++编译的应用程序一起使用?

问候.

c++ linux garbage-collection g++

6
推荐指数
1
解决办法
3918
查看次数

C:结构或数组的速度更快?

我想实现(代表抽象的)二维4x4矩阵.我为矩阵乘法等编写的所有代码都将完全"展开" - 也就是说,我不会使用循环来访问和写入矩阵中的数据条目.

我的问题是:在C中,使用结构本身会更快:

typedef struct {
    double e0, e1, e2, e3, e4, ..., e15
} My4x4Matrix;
Run Code Online (Sandbox Code Playgroud)

或者这会更快:

typedef double My4x4Matrix[16];
Run Code Online (Sandbox Code Playgroud)

鉴于我将单独访问每个矩阵元素:

My4x4Matrix a,b,c;
// (Some initialization of a and b.)
...
c.e0=a.e0+b.e0;
c.e1=a.e1+b.e1;
...
Run Code Online (Sandbox Code Playgroud)

要么

My4x4Matrix a,b,c;
// (Some initialization of a and b.)
...
c[0]=a[0]+b[0];
c[1]=a[1]+b[1];
...
Run Code Online (Sandbox Code Playgroud)

或者它们的速度完全相同?

c arrays performance struct

4
推荐指数
2
解决办法
6837
查看次数