小编hmj*_*mjd的帖子

C++ make_shared不可用

虽然我std::tr1::shared_ptr<T>在我的编译器中可用,但我没有make_shared.

有人能指点我正确实施make_shared吗?我看到我需要使用varargs为T的构造函数提供参数.

但是我的编译器中也没有可用的变量模板.

c++ tr1 make-shared

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

C/C++数学运算顺序

所以我知道C++有一个运算符优先级

int x = ++i + i++;
Run Code Online (Sandbox Code Playgroud)

未定义,因为pre ++和post ++处于同一级别,因此无法确定哪个将首先计算.但我想知道的是,如果

int i = 1/2/3;
Run Code Online (Sandbox Code Playgroud)

未定义.我问的原因是因为有多种方法可以看(1/2)/ 3 OR 1 /(2/3).我的猜测是它是一个未定义的行为,但我想确认一下.

c c++ math operator-precedence

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

类和结构嵌套

我对这段代码不是很清楚

外面是一个class和内在的struct,任何人都可以帮我解释一下吗?

class Stack {
    struct Link {
        void* data;
        Link* next;
        Link(void* dat, Link* nxt):
        data(dat),next(nxt) {}
    }* head;
public:
    Stack():head(0) {}
    ~Stack() {
        require(head==0,"Stack not empty");
    }
    void push(void* dat) {
        head = new Link( dat, head );
    }
    void peek() const {
        return head ? head->data : 0;
    }

    void* pop() {
        if(head == 0)  return 0;
        void* result = head->data;
        Link* oldHead = head;
        head = head->next;
        delete oldHead;
        return result;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ struct class

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

动态初始化

C++ 03标准[basic.start.init]第3点指出:

它是实现定义的,无论命名空间作用域的对象的动态初始化(8.5,9.4,12.1,12.6.1)是否在main的第一个语句之前完成.如果初始化延迟到main的第一个语句之后的某个时间点,则它应该在第一次使用与要初始化的对象相同的转换单元中定义的任何函数或对象之前发生.

根据Additional Startup Considerations,Microsoft Compilers在执行之前执行初始化main().

我无法获得说明GNU和Sun Forte编译器行为的文档.

谁能:

  1. 请指出描述GNU和Forte编译器在动态初始化方面的行为的文档方向(我已经检查过GCC手册,但没有发现任何与动态初始化有关的内容).
  2. 评论延迟动态初始化的线程安全性(如果两个线程尝试从包含非本地对象的同一转换单元调用函数).

FWIW,我观察了GNU的g ++和SUN的CC的行为,并且都在main之前进行了初始化,尽管我不接受这个作为确定的答案.(我可以发布我以前用来观察的非常简单的代码,如果有人有兴趣,但我觉得这个问题足够长了)

c++

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

PriorityQueue是FIFO队列吗?

PriorityQueue实现Queue,但是PriorityQueueFIFO数据结构是Queue什么样的?

java priority-queue

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

C全局结构指针

我有一个在文件中声明的typedef'ed结构.我有一个指针,并希望在多个文件中使用它作为全局变量.有人可以指出我做错了什么吗?

fileA.h:

typedef struct
{
  bool                  connected;
  char                  name[20];
}vehicle;

extern vehicle *myVehicle;
Run Code Online (Sandbox Code Playgroud)

fileA.c:

#include "fileA.h"
void myFunction(){
    myVehicle = malloc(sizeof(vehicle));
    myVehicle->connected = FALSE;
}
Run Code Online (Sandbox Code Playgroud)

fileB.c:

#include "fileA.h"
void anotherFunction(){
   strcpy(myVehicle->name, "this is my car");
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

fileA中引用了未定义的外部"myVehicle"

c variables struct pointers global-variables

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

无法从'FARPROC'转换为'BOOL(__ cdecl*)(LPMEMORYSTATUSEX)'

BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress(
                kernel32, "GlobalMemoryStatusEx");
Run Code Online (Sandbox Code Playgroud)

这是一个.cpp文件.在编译上面的代码时,我收到以下错误.

error C2440: 'initializing' : cannot convert from 'FARPROC' to 'BOOL (__cdecl *)(LPMEMORYSTATUSEX)'
    This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚我应该将该GetProcAddress函数转换为什么.有人可以指点我正确的方向吗?

谢谢

c++ winapi

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

从类型T的数组初始化类型为T*的Stl向量

如果我有一个数组,如:

struct S {... };

S m_aArr[256];
Run Code Online (Sandbox Code Playgroud)

我想用它来构造一个矢量,如:

std::vector<S*> m_vecS;
Run Code Online (Sandbox Code Playgroud)

无论如何要做到这一点而不是循环并推回&m_aArr[i]?我知道我不能使用传统的使用std::beginstd::end数组的方法,因为向量是指针之一,原始数组是对象之一,所以我们不能只传入一块内存.

c++ arrays stl vector c++11

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

static_cast vs boost :: lexical_cast

我试图将一个整数连接到一个已知的字符串,我发现有几种方法可以做到这一点,其中两个是:

int num=13;
string str = "Text" + static_cast<ostringstream*>( &(ostringstream() << num) )->str();
Run Code Online (Sandbox Code Playgroud)

或者我也可以使用boost库' lexical_cast:

int num=13;
string str= "Text" + boost::lexical_cast<std::string>(num);
Run Code Online (Sandbox Code Playgroud)

是否boost::lexical_cast以任何方式使用更高效,因为我已经知道转换类型(intto string)?或者static_cast同样有效,而不必依赖外部库?

c++ string boost casting

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

如何将const字符串值放在map中

我想创建一张地图,

std::map <MESSAGE_CATEGORY, const std::string> m_mapResponseDesc;

operator[]用来在地图中追加一个值:

m_mapResponseDesc[STATUS_LIMIT] = "Limit has been exceeded";
Run Code Online (Sandbox Code Playgroud)

STATUS_LIMIT是类型的enum.

我收到错误:

错误C2678:binary'=':找不到运算符,它接受类型为'const std :: basic_string <_Elem,_Traits,_Ax>'的左手操作数(或者没有可接受的转换)

请指出我做了什么错误.我没有得到任何线索.

c++ stl

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