小编Pet*_*der的帖子

为什么无法访问新[]'d数组的大小?

使用时分配数组时new [],为什么不能从指针中找出该数组的大小?它必须在运行时delete []知道,否则不知道要释放多少内存.

除非我错过了什么?

c++ arrays new-operator delete-operator

19
推荐指数
3
解决办法
600
查看次数

C++ 0x中模板别名的灵活性

据我所知,C++ 0x中的模板别名将允许我们执行以下操作:

template <typename T>
using Dictionary = std::map< std::string, T >;

Dictionary<int> ints;
ints[ "one" ] = 1;
ints[ "two" ] = 2;
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

首先,我们能够做到这一点(绑定到任何类型,或只是模板):

template <typename Iter>
using ValueType = std::iterator_traits<Iter>::value_type;
Run Code Online (Sandbox Code Playgroud)

其次,使用别名需要typename在模板中使用关键字,例如:

template <typename Iter>
typename ValueType<Iter> sum(Iter first, Iter last) { ... }
// ^ required?
Run Code Online (Sandbox Code Playgroud)

或者在别名声明中是否需要它?

using ValueType = typename std::iterator_traits<Iter>::value_type;
//                   ^ required?
Run Code Online (Sandbox Code Playgroud)

或者都不是?

c++ templates typename c++11

18
推荐指数
1
解决办法
6915
查看次数

读写C++向量到文件

对于某些图形工作,我需要尽快读取大量数据,理想情况下是直接读取和写入数据结构到磁盘.基本上我有各种各样的文件格式的3D模型,加载时间太长,所以我想把它们以"准备好"的格式写出来作为缓存,在后续的程序运行中加载速度要快得多.

这样做是否安全?我担心的是直接读入载体的数据?我已经删除了错误检查,硬编码4作为int的大小等等,所以我可以给出一个简短的工作示例,我知道这是错误的代码,我的问题是如果在c ++中读取整个数组是安全的结构直接进入这样的矢量?我相信它是这样的,但是当你开始进入低级并直接处理像这样的原始内存时,c ++有很多陷阱和未定义的行为.

我意识到数字格式和大小可能会在平台和编译器之间发生变化,但这只会由同一个编译器程序读取和写入,以缓存稍后运行同一程序时可能需要的数据.

#include <fstream>
#include <vector>

using namespace std;

struct Vertex
{
    float x, y, z;
};

typedef vector<Vertex> VertexList;

int main()
{
    // Create a list for testing
    VertexList list;
    Vertex v1 = {1.0f, 2.0f,   3.0f}; list.push_back(v1);
    Vertex v2 = {2.0f, 100.0f, 3.0f}; list.push_back(v2);
    Vertex v3 = {3.0f, 200.0f, 3.0f}; list.push_back(v3);
    Vertex v4 = {4.0f, 300.0f, 3.0f}; list.push_back(v4);

    // Write out a list to a disk file
    ofstream os ("data.dat", ios::binary);

    int size1 = list.size();
    os.write((const …
Run Code Online (Sandbox Code Playgroud)

c++ file-io vector

17
推荐指数
3
解决办法
4万
查看次数

为什么Phobos使用enum作为常量?

为什么Phobos enum用来定义常量?例如,在std.math中:

enum real E = 2.7182818284590452354L;
Run Code Online (Sandbox Code Playgroud)

为什么不使用全球immutable?有什么优势/劣势enumimmutable

enums d phobos

16
推荐指数
1
解决办法
460
查看次数

15
推荐指数
3
解决办法
449
查看次数

回答练习面试问题

我只是要经历一堆C++面试问题,以确保没有任何明显的我不知道.到目前为止,我还没有找到任何我不知道的东西,除了这个:

long value;
//some stuff
value &= 0xFFFF;
Run Code Online (Sandbox Code Playgroud)

问题是"这段代码出了什么问题?" 并暗示这与目标架构有关.

除非答案只是"价值未初始化",否则我看不出任何问题.据我所知,它只是掩盖了值的2个最低有效字节,并且long保证至少为2个字节,因此没有问题.

可能是long目标架构上可能只有2个字节,你可能会丢失符号位吗?或者也许0xFFFF是一个int而且int只有2个字节?

提前致谢.

c++ long-integer

14
推荐指数
2
解决办法
2809
查看次数

有一个boost :: weak_intrusive_pointer吗?

由于遗留原因,我需要使用侵入式指针,因为我需要能够将原始指针转换为智能指针.

但是我注意到没有弱的侵入式指针可以提升.我确实在boost线程列表上找到了关于它的讨论,但没有具体的.

有谁知道弱侵入指针的线程安全实现?

谢谢Rich

c++ boost pointers weak

14
推荐指数
2
解决办法
2618
查看次数

为什么std :: vector不能采用本地类型?

void foo() {
  struct Foo { .. };
  std::vector<Foo> vec; // why is this illegal?
}
Run Code Online (Sandbox Code Playgroud)

我不会把Foo归还外面的世界.它只是我在函数中使用的临时类型.

c++ vector local-class

14
推荐指数
1
解决办法
3100
查看次数

高速缓存命中/错过C/C++程序中的值

这是我的要求,我知道某些算法很好地利用了Cache,有些算法没有,有些算法在特定数据集上做了比其他算法更多的I/O等等.我想看看并分析自己发生的事情.

所以我想知道是否有一种方法我可以知道如何读取某个内存/变量,即它是来自缓存,还是存在缓存未命中.此外,如果在检索此值时出现页面错误等.

非常感谢!

c c++ performance profiling

14
推荐指数
1
解决办法
1928
查看次数

D中的逻辑常量

D有两种类型的const:不可变变量是声明为不可变的变量,并且总是不可变的,而const变量只是对象的只读版本.

逻辑const是将函数标记为const,但允许对一个或多个成员变量进行写访问.这种方法的典型用途是进行惰性评估,例如(在C++中)

struct Matrix
{
  double determinant() const
  {
    if ( m_dirty )
    {
      m_determinant = /* expensive calculation */;
      m_dirty = false;
    }
    return m_determinant;
  }

  void set(int i, int j, double x) { m_dirty = true; ...; }

  mutable bool m_dirty;
  mutable double m_determinant;
};
Run Code Online (Sandbox Code Playgroud)

在这里,determinant()const,但仍然可以修改m_dirty,m_determinant因为它们被标记为mutable.

d常量(FAQ)说,D2不支持,因为它提供了,这是造成障碍编写并发程序,并使得一定的优化更加困难弱势保证逻辑常量.

我完全理解这个问题,但是如果我们需要逻辑const呢?

考虑上面的情况与Matrix类,但没有缓存(和任何需要逻辑const).还想象一下,这个类在我的代码库中使用,并且主要通过const引用访问.

现在考虑分析已经揭示该determinant()函数是代码中的瓶颈,而且它通常被重复访问,其值很少改变,即如上所述的缓存将是完美的优化.

没有逻辑const我怎么能这样做呢?遍及我的代码库将const引用更改为非const引用不是一种选择(出于显而易见的原因). …

d const const-correctness mutable

13
推荐指数
1
解决办法
1704
查看次数