虽然我std::tr1::shared_ptr<T>在我的编译器中可用,但我没有make_shared.
有人能指点我正确实施make_shared吗?我看到我需要使用varargs为T的构造函数提供参数.
但是我的编译器中也没有可用的变量模板.
所以我知道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).我的猜测是它是一个未定义的行为,但我想确认一下.
我对这段代码不是很清楚
外面是一个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++ 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编译器行为的文档.
谁能:
FWIW,我观察了GNU的g ++和SUN的CC的行为,并且都在main之前进行了初始化,尽管我不接受这个作为确定的答案.(我可以发布我以前用来观察的非常简单的代码,如果有人有兴趣,但我觉得这个问题足够长了)
PriorityQueue实现Queue,但是PriorityQueueFIFO数据结构是Queue什么样的?
我有一个在文件中声明的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"
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函数转换为什么.有人可以指点我正确的方向吗?
谢谢
如果我有一个数组,如:
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::begin和std::end数组的方法,因为向量是指针之一,原始数组是对象之一,所以我们不能只传入一块内存.
我试图将一个整数连接到一个已知的字符串,我发现有几种方法可以做到这一点,其中两个是:
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同样有效,而不必依赖外部库?
我想创建一张地图,
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>'的左手操作数(或者没有可接受的转换)
请指出我做了什么错误.我没有得到任何线索.