小编Cod*_*ash的帖子

编译器可能不会跨序列点移动对volatile变量的访问; 这是什么意思?

将变量声明为"volatile"意味着直接从内存位置读取/写入,而不是从寄存器变量读取/写入.我对'序列点'有所了解.但我不明白标题中提到的陈述.

有人可以解释一下,并给出一些代码片段吗?

c compiler-construction volatile sequence-points

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

冗余静态数据

此问题适用于任何类型的静态数据.我只是int用来保持示例简单.

我正在读取一个包含整数的大型XML数据文件,并将它们存储在一个vector<int>.对于我正在使用的特定数据,相同的值连续重复多次是很常见的.

<Node value="4" count="4000">
Run Code Online (Sandbox Code Playgroud)

count属性表示该值重复x次:

for(int i = 0; i < 4000; i++)
    vec.push_back(4);
Run Code Online (Sandbox Code Playgroud)

当我已经知道它将连续出现4000次时,重复存储相同值似乎是浪费内存.但是,我需要能够在任何时候索引到向量.

对于较大的数据对象,我知道我只能存储一个指针,但仍然需要在上面的例子中存储4000个相同的指针.

是否有任何类型的策略来处理这样的问题?

c++ xml static vector

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

如何"声明性地"填充"树"结构

我想定义一个'node'类/结构,然后在代码中声明这些节点的树,这样代码的格式反映了树的结构,并且没有"太多"的样板.

请注意,这不是关于数据结构的问题,而是关于我可以使用C++的哪些功能来获得与下面示例类似的声明性代码样式.

可能使用C++ 0X,这将更容易,因为它在构建对象和集合方面具有更多功能,但我使用的是Visual Studio 2008.

示例树节点类型:

struct node
{ 
  string name;
  node* children;

  node(const char* name, node* children);
  node(const char* name);
};
Run Code Online (Sandbox Code Playgroud)

我想做的事:

声明一棵树,使其结构反映在源代码中

node root =
  node("foo",
  [
    node("child1"),
    node("child2", 
    [
      node("grand_child1"),
      node("grand_child2"),
      node("grand_child3"
    ]),
    node("child3")
  ]);
Run Code Online (Sandbox Code Playgroud)

NB:我不想做的事情:

声明一大堆临时对象/ colls并构造树'向后'

node grandkids[] = node[3] 
{
  node("grand_child1"),
  node("grand_child2"),
  node("grand_child3"
};

node kids[] = node[3]
{
  node("child1"),
  node("child2", grandkids) 
  node("child3")
};

node root = node("foo", kids);
Run Code Online (Sandbox Code Playgroud)

c++ tree visual-studio-2008 data-structures

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

无用条件下的可变修改

如果foo == 13为false,此代码是否具有明确定义的行为?

if (foo == 13 && ++bar > 42)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

c variables

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

除了createfile和openfile之外,还有任何windows apis来获取文件句柄吗?

我试图窥探应用程序正在写入的日志文件.

我已成功将createfile与来自MSR的detours库挂钩,但似乎永远不会使用我感兴趣的文件调用createfile.我也试过用相同的结果挂钩openfile.

我不是一个经验丰富的windows/c ++程序员(甚至是一个经验丰富的程序员),所以我最初的两个想法是应用程序在挂钩api之前调用createfile,或者是否有其他api用于创建文件/获取它们的句柄.

编辑:感谢您的两个好评.我会upwote编码thewheel的回复,因为它是提供信息,但我没有足够的代表:(

c++ windows api logfiles

5
推荐指数
2
解决办法
3147
查看次数

指向具有不同模板参数的类模板的指针

我在采访中得到了这个问题,但仍然不知道如何解决这个问题:

假设我们有一个C++代码:

int main(int argc, char* argv[])
{
    L<A>* pA = 0;
    L<B>* pB = 0;
    pA = pB;
}
Run Code Online (Sandbox Code Playgroud)

我们应该添加什么以便实际编译?

换句话说,我们应该如何界定L,A以及B类?请不要使用预处理程序的指令.

我只知道如何解决它:

template<class T> struct L {};
struct A {};
typedef A B;
Run Code Online (Sandbox Code Playgroud)

甚至更简单的前向声明:

struct A;
typedef A B;
template<class> struct L;
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

c++ templates pointers

5
推荐指数
3
解决办法
483
查看次数

在C++中,如何在不使用友元函数的情况下通过对象调用私有函数?

我遇到了用C++编写的代码:

#include<iostream>
using namespace std;

class Base {
public:
    virtual int fun(int i) { cout << "Base::fun(int i) called"; }
};

class Derived: public Base {
private:
    int fun(int x)   { cout << "Derived::fun(int x) called"; }
};

int main()
{
    Base *ptr = new Derived;
    ptr->fun(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

 Derived::fun(int x) called 
Run Code Online (Sandbox Code Playgroud)

在以下情况中:

#include<iostream>
using namespace std;

class Base {
public:
    virtual int fun(int i) { }
};

class Derived: public Base {
private:
    int fun(int x)   { …
Run Code Online (Sandbox Code Playgroud)

c++ oop polymorphism dynamic-binding

5
推荐指数
1
解决办法
1314
查看次数

int*参数与int []参数完全相同

以下2个功能基本上是相同的功能吗?

即,是一个int*完全相同的int[]

int myFunction(int* xVals, int* yVals, int nVertices);
int myFunction(int xVals[], int yVals[], int nVertices);
Run Code Online (Sandbox Code Playgroud)

我该如何使用第一个功能?即,我如何在参数中传递数组?以下是否有效/正确?

int xVals[5], yVals[5], zVals[5];
myFunction(xVals, yVals, zVals, 5);

// or should it be..
myFunction(&xVals[0], &yVals[0], &zVals[0], 5);
Run Code Online (Sandbox Code Playgroud)

c c++ parameters pointers function

5
推荐指数
1
解决办法
440
查看次数

为什么我收到错误“非模板‘f’用作模板”

我试图了解在哪里使用templatetypename但遇到了一个我无法解决的问题。我有一个模板函数f<T>,它使用传递给它的类型(这将是一个类)来调用模板成员函数.f<T>。我认为我typename在函数体中的使用是正确的,但是,我不断收到以下错误:

source.cpp:在函数中'void f()'
source.cpp:11:19: error: non-template 'f'used as template
source.cpp:11:19: 注意:用于'typename T::C::template f'表示它是模板

struct A {
  struct C {
     template <typename T> void f() {}
  };
};

template <typename T> void f() {

  typename T::C::f<int>();

}

int main() {

  f<A>();

}
Run Code Online (Sandbox Code Playgroud)

请注意它建议使用的最后一个错误'typename T::C::template f'。所以我做了以下改动:

// ...
typename T::C::template f<int>();
// ...
Run Code Online (Sandbox Code Playgroud)

我按照它说的做了,但后来我收到了下一行错误:

错误:没有名为类模板'f''struct A::C'

我相信,这个错误是不正确的,有在事实上称为公共模板函数fstruct …

c++ templates struct

5
推荐指数
1
解决办法
2641
查看次数

生成2 ^ 30的随机数

我想生成2^300到2 ^ 10范围内的随机数.我听说这个rand()函数不适合这么多的数字.有没有其他方法可以用几乎相等的分布生成它?

c c++ java

5
推荐指数
1
解决办法
354
查看次数