小编jal*_*alf的帖子

是否可以向C++结构添加静态变量?

尝试向我的struct添加静态变量时出现以下错误:

模块file_name.cpp中未定义的Symbole s2 :: aa

s2是结构的名称,aa是静态变量.我使用的编译器是Turbo C++ 3.0.

我该如何解决这个错误?

c++

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

在C++中推断函数或函子的返回类型

我需要使用函数/函数的返回值,而不知道它是什么类型(即作为模板).

虽然我可以将它传递给第二个函数而没有问题:

template <typename T>
void DoSomething(T value);

...

DoSomething(FunctionWhoseReturnedTypeIsUnknown(...));
Run Code Online (Sandbox Code Playgroud)

我想使用返回的内联值(无需调用第二个函数):

WhatGoesHere? x=FunctionWhoseReturnedTypeIsUnknown(...);
Run Code Online (Sandbox Code Playgroud)

这两种方法在概念上看起来与我相同(generic-programming-wize),但后者是否可以在C++中实现?

c++ generic-programming

3
推荐指数
1
解决办法
2327
查看次数

当我无意中使用变量来声明数组长度时,C++真的在做什么?

我正在帮朋友做一些C++的家庭作业.我警告说,我所做的那种编程(PHP,Perl,Python)与C++有很大的不同,并且我无法保证我不会说出可怕的谎言.

我能够回答他的问题,但不是没有绊倒我自己的动态背景.当我重新认识C++数组语义时,我做了一些像这样的蠢事(简化示例让我的问题更加清晰)

 #include <iostream>
 #include <cstring>
 using namespace std;
 int main()
 {
   char easy_as_one_two_three[] = {'A','B','C'};  
   int an_int = 1;

   //I want an array that has a length of the value 
   //that's currently in an_int (1)
   //This clearly (to a c++ programmer) doesn't do that.
   //but what is it doing?
   char breaking_things[an_int];

   cout << easy_as_one_two_three << endl;
   return 1;
 }
Run Code Online (Sandbox Code Playgroud)

当我编译并运行该程序时,它会产生以下输出

 ABC????
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉我的虚假阵列声明

 #include <iostream>
 #include <cstring>
 using namespace std;
 int main()
 {
   char easy_as_one_two_three[] = {'A','B','C'};  
   int an_int = …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

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

如何查看编译器生成的代码

来自TC++ PL Bjarne的一个例外(ch.5,e.8)中的人要求做以下事情:
''运行一些测试,看看你的编译器是否真的使用指针生成等效的迭代代码并使用索引进行迭代.如果不同可以请求优化程度,看看是否以及如何影响生成代码的质量"'

知道如何吃它和什么?谢谢你的建议.

c++ compiler-construction testing

3
推荐指数
1
解决办法
402
查看次数

C++中的闭包

我发现自己处在一个陌生的地方,精神上.在C++项目中,我渴望关闭.

背景.有一个Document类型的类,它有一个公共Render方法,它产生一个深度调用树.有一些瞬态只在渲染过程中才有意义.现在它像常规成员变量一样驻留在类中.但是,这在某些级别上并不令人满意 - 这些数据仅在渲染调用期间有意义,为什么要一直存储它?在参数中传递它将是丑陋的 - 那里有大约15个变量.绕过一个结构会在低级方法中添加很多"RenderState - > ...".

那我想要什么?我想要世界,就像我们所做的一样.具体来说,一组变量是:

  • 可用于类中的某些方法(不是全部)
  • 只能通过名称访问(没有pState - > ......东西 - 所以重构很容易)
  • 没有在每个方法调用上复制
  • 只在方法调用期间生活并调用其调用树(假设树长大)
  • 住在一堆

我知道我可以使用C++获得一些属性 - 但不是全部.告诉我,我不会变得怪异.

哎呀,在帕斯卡尔,所有地方,嵌套功能给你所有......

那么,在C++中模拟闭包的好方法是什么,尽可能多地获得上述好处?

c++

2
推荐指数
1
解决办法
3030
查看次数

在C++应用程序中使用纯C(非类包装)函数时是否有任何问题?

我打算在C++应用程序中使用纯C MPI库,我不想通过运行eg添加不必要的膨胀.提升包装MPI::<func>类中所有内容的MPI层.

有什么我应该知道的吗?

c c++ interop

2
推荐指数
1
解决办法
199
查看次数

C++中的快速地图实现

我现在有一个工作实现,映射范围的键,如下所示:

class Range {
public:
    Range(int from, int to = -1) : _from(from), _to( to >= 0 ? to : from) {}
    bool operator < (const Range& item) {
        return _to < item._from;
    }
    bool operator == (const Range& item) {
        return item._from >= _from && item._to <= _to;
    }
private:
    int _from, _to;
};

typedef std::map<Range, MappedType> my_map_type;
Run Code Online (Sandbox Code Playgroud)

很酷的是,我能做到:

my_map_type m;
m[Range(0, 20)] = Item1;
m[Range(30,40)] = Item2;

my_map_type::iterator it = m.find(15);
assert(it->second == Item1);
it = m.find(40);
assert(it->second …
Run Code Online (Sandbox Code Playgroud)

c++ map

2
推荐指数
1
解决办法
1580
查看次数

在数据库中创建百万表?

我想创建一个百万双列表..好吧我试图创建使用java,花了大约100 mbs的数据转换为7Gbs并花了20小时来完成它...我使用postgre sql之前我尝试过mysql,mysql甚至更糟糕..有没有办法用更少的空间和时间创建这么多的表?水平分区会很好吗?

我试图索引RDF数据以便快速执行,Idea是使用rdbms索引rdf数据并将sparql查询转换为sql查询,以及RDF是三元组主题,谓词,对象,现有方法使用谓词表方式的资源集合,对于每个谓词,主题和对象都存储,谓词的数量与其他谓词相比要少得多.因此,查询需要连接这些谓词表,以便在平面文件中获得大约100mbs的结果.我试图创建主题表4快速执行

database postgresql optimization

2
推荐指数
1
解决办法
1593
查看次数

关于unique_ptr表演

我经常读到unique_ptr在大多数情况下比shared_ptr更受欢迎,因为unique_ptr是不可复制的并且具有移动语义; shared_ptr会因复制和引用计数而增加开销;

但是当我在某些情况下测试unique_ptr时,它看起来比它的对手明显更慢(在访问中)

例如,在gcc 4.5下:

编辑:打印方法实际上不打印任何内容

#include <iostream>
#include <string>
#include <memory>
#include <chrono>
#include <vector>

class Print{

public:
void print(){}

};

void test()
{
 typedef vector<shared_ptr<Print>> sh_vec;
 typedef vector<unique_ptr<Print>> u_vec;

 sh_vec shvec;
 u_vec  uvec;

 //can't use initializer_list with unique_ptr
 for (int var = 0; var < 100; ++var) {

    shared_ptr<Print> p(new Print());
    shvec.push_back(p);

    unique_ptr<Print> p1(new Print());
    uvec.push_back(move(p1));

  }

 //-------------test shared_ptr-------------------------
 auto time_sh_1 = std::chrono::system_clock::now();

 for (auto var = 0; var < 1000; ++var) 
 {
   for(auto it …
Run Code Online (Sandbox Code Playgroud)

c++ gcc unique-ptr c++11

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

什么是将地图的键集转换为键向量的有效方法

什么是将map的键集转换为键的向量的有效方法,目前我正在迭代我的地图并将iter.first添加到vector中,这类似于Java的KeySet api?

c++ stdmap std stdvector

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