我有以下代码的问题:
template <typename U>
class lamePtr
{
public:
typedef U* ptr;
};
template <typename U>
class smarterPointer
{
public:
void funFun()
{
typedef lamePtr<U> someType;
someType::ptr query;
}
};
Run Code Online (Sandbox Code Playgroud)
如你所见,我在lamePtr中有一个typedef.在smarterPointer类里面我有一个函数funFun().我想做的是制作另一个typedef someType.直到该行,一切正常,直到我们到someType :: ptr查询行.
我想要发生的是"查询"将成为lamePtr <U> :: ptr(一个简单的值,而不是typedef;).但是,我得到编译错误(使用gcc 4.4.3):
temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我想知道来自编译器的这个消息是否应该仔细考虑.
我们来看看以下代码:
struct s
{
int a;
int b[];
};
void fun(struct s c)
{
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
main.c:7:6: note: the ABI of passing struct with a flexible array member has changed in GCC 4.4
Run Code Online (Sandbox Code Playgroud)
我的问题是:在更大的项目中安全使用这种结构吗?这种结构可能带来的风险和影响是什么(除了编译器消息)?
我正在尝试创建一个看门狗类,它将在指定时间后抛出异常:
from threading import Timer
from time import sleep
class watchdog():
def _timeout(self):
#raise self
raise TypeError
def __init__(self):
self.t = Timer(1, self._timeout)
def start(self):
self.t.start()
try:
w = watchdog()
w.start()
sleep(2)
except TypeError, e:
print "Exception caught"
else:
print "Of course I didn't catch the exception"
Run Code Online (Sandbox Code Playgroud)
该异常未被捕获,因为该异常是从完全不同的上下文引发的,因此我们将看到最后一条消息。
我的问题是,如何修改代码,以便捕获异常?
我是C ++的新手,我在下面的代码片段中遇到了这个代码片段,这对我来说似乎很奇怪。
const char* keys = "hello" "world";
std::cout << keys << std::endl;
Run Code Online (Sandbox Code Playgroud)
上面的代码在控制台中显示helloworld。在同一条语句中将两个字符串文字分配给const char *是否在语法上有效?如果是这样,它将如何存储在内存中?
尝试使用"dmalloc"编译和链接我的程序时遇到问题.
bin
+--dmalloc
include
+--dmalloc.h
lib
+--libdmalloc.a
+--libdmallocth.a
main.c
Run Code Online (Sandbox Code Playgroud)
我有以下目录结构
现在我尝试使用以下命令编译我的程序:
gcc -Iinclude -Llib -ldmalloc -DDMALLOC main.c
/tmp/ccSDFmWj.o: In function `main':
main.c:(.text+0x29): undefined reference to `dmalloc_malloc'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
好吧,我知道链接符号有问题,ld根本找不到对dmalloc_malloc的引用.然而...
nm lib/libdmalloc.a | grep dmalloc_malloc
0000000000001170 T dmalloc_malloc
0000000000000fe0 t dmalloc_malloc.part.6
Run Code Online (Sandbox Code Playgroud)
我很困惑......那个图书馆里有符号.为什么'ld'有问题?
我们假设我有以下字符串:
out = "someUndefinedGarbageVALUE: 12 34 23 00possiblySomeOtherGarbage"
Run Code Online (Sandbox Code Playgroud)
现在我要解析"12 34 23 00"值.在这种情况下,我执行以下操作:
regex = re.compile('VALUE: (\d\d\s?)*')
matches = regex.findall(out)
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,我只会得到:
00
Run Code Online (Sandbox Code Playgroud)
当我升级正则表达式时:
regex = re.compile('VALUE: ((\d\d\s?)*)')
Run Code Online (Sandbox Code Playgroud)
我会得到:
12 34 23 00, 00
Run Code Online (Sandbox Code Playgroud)
我的问题:
1)使用http://regexpal.com/我看到第一个表达式很好用.试试自己:
VALUE: (\d\d\s?)*
Run Code Online (Sandbox Code Playgroud)
反对
garbageVALUE: 05 03 04garbage
Run Code Online (Sandbox Code Playgroud)
使用Python它是不同的.我的推理在哪里错了?
2)为什么第二个表达式恰好捕获了两个组?它应该只捕获一个
12 34 23 00
Run Code Online (Sandbox Code Playgroud)
或所有可能的变化?
12, 12\s, 12\s34 ...
Run Code Online (Sandbox Code Playgroud)
我知道这是一个贪婪的搜索,但为什么两个群体被捕?
假设我有一个存储回调的变量.
void* (*function)(int, double);
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个函数,它将返回此回调.我不希望用户直接访问回调,而是通过函数访问.这不起作用:
void* (*)(int, double) getCallback();
Run Code Online (Sandbox Code Playgroud)
我的问题是:这种功能的原型是什么样的?