我在Boost Library中遇到了一段代码,用于offset_ptr.在boost/interprocess/offset_ptr.hpp下
typedef PointedType * pointer;
...
//!Constructor from other pointer.
//!Never throws.
template <class T>
offset_ptr(T *ptr)
{ pointer p (ptr); (void)p; this->set_offset(p); }
Run Code Online (Sandbox Code Playgroud)
我想知道什么是声明(void)p; 呢?
我有一个程序,我正在尝试解码.它被另一种语言翻译成C(这里没有说出其名称),并且我想了解它是如何工作的,我正在慢慢地重写代码并简化它以使用C提供的所有好的逻辑结构.
以下一点点不断出现在我的代码中,其中包含不同的值X
和Y
:
ptr[X]--;
while(ptr[X])
{
ptr[X]--;
ptr += Y;
}
Run Code Online (Sandbox Code Playgroud)
ptr
是类型的char *
,我无法在任何时候对数组的状态做出假设,因为它非常深入地嵌入循环并依赖于输入和输出.我可以成功地"简化"到:
for(ptr[X]--; ptr[X]; ptr[X]--, ptr += Y);
Run Code Online (Sandbox Code Playgroud)
但那太糟糕了.曾经如此稍微好一点:
for(ptr[X]--; ptr[X]; ptr += Y) ptr[X]--;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人能够更好地简化上述代码,我将不胜感激.这种情况发生在不少于五个地方,并且削弱了我简化和理解流量控制的能力,所以如果任何人都可以提供更简洁/可读的版本,那将是非常棒的.如果任何人都可以提供对该代码的任何奇特的洞察力,那将是非常棒的,虽然我基本上了解它的作用.
洞察特定的代码X
和/或Y
也可以提供帮助.Y
往往介于-2和2之间,X
通常为1,因为它的价值.
我正在使用mod_rewrite来更改站点上的所有URL.示例:http://www.site.com/about/
成为http://www.site.com/?action=about
(不用担心,我有很好的友好理智检查).问题是除了http://www.site.com/
CSS样式表之外的任何其他内容都不会加载.我认为这是因为它寻找样式表/about/content/style.css
而不是/content/style.css
.如何确保找到合适的样式表?
以下是我的一些代码以防万一..htaccess
看起来像这样:
RewriteEngine on
RewriteRule ^news/([0-9]+)/?$ /?action=news&start=$1 [L]
RewriteRule ^news/?$ /?action=news&start=0 [L]
RewriteRule ^(about|contact|man|home|download)/?$ /?action=$1 [L]
Run Code Online (Sandbox Code Playgroud)
他们都重定向到index.php
,开始时这样:
<html>
<head>
...
<link rel="stylesheet" href="content/style.css" type="text/css" />
</head>
<body>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我的文件中有以下重写规则.htaccess
:
RewriteEngine on
RewriteRule ^news/([0-9]+)/?$ /?action=news&start=$1 [L]
RewriteRule ^man/([a-zA-Z0-9_]+)/?$ /?action=man&page=$1 [L]
RewriteRule ^([a-zA-Z0-9_]+)/?$ /?action=$1 [L]
Run Code Online (Sandbox Code Playgroud)
然后以a结束/?
检查可选的尾部斜杠.这工作-这意味着我可以使用http://www.site.com/news/
或http://www.site.com/news
获得的news
页面,这就是我想要的.问题是,虽然http://www.site.com/news/
工作正常并且无声地重定向以及所有有趣的东西,但由于某种原因http://www.site.com/news
明显被重定向http://www.site.com/news/?action=news
.他们都提出了相同的网站,但出于某种原因,如果我不使用尾随斜线,URL会发生变化并且看起来很讨厌.
有什么想法吗?我的.hyaccess
档案中没有其他规则.我也会指出http://www.site.com/news/0
并且http://www.site.com/news/0/
不会遇到同样的问题.他们两个都无形地重定向http://www.site.com/?action=news&start=0
,这就是我想要的.这似乎只是第三条规则的问题.
如果它有帮助,该网站在SourceForge.net上.
当我遇到这个问题时,我试图为别人做一个正则表达式.要求是正则表达式应该返回一组字符串的结果,其中包括"apple".例如,请考虑以下字符串:
"I have an apple"
"You have two Apples"
"I give you one more orange"
结果集应该有前两个字符串.
我试过的正则表达式是:
/[aA]pple/
和 /[^a-zA-Z0-9][aA]pple/
第一个问题是像"aapple","bapple"等一样的话(好吧,所以它们没有意义,但仍然......)用它测试正面,而第二个问题是当一个字符串时实际上以"苹果","苹果和橘子"这个词开头,例如,它测试为负面.有人可以解释为什么第二个正则表达式以这种方式运行以及正确的正则表达式是什么?
编译器说我在执行此操作时找不到该函数的引用:
// link.h
template <class T>
T *Link(T *&, T *(*)())
// link.cpp
template <class T>
T c:Link(T *&ChildNodeReference, T *(*ObjectCreator)()){
}
Run Code Online (Sandbox Code Playgroud)
如果我在标题内的类中实现它顺利进行.
拜托,我会在标题上工作,直到有人为此启发我.
C++中有些东西很奇怪.我知道,有这样的原因等等.即便如此,编译器也无法帮助你解决它-_-"
忽略多线程问题,以下保证可以正常工作:
int can_alloc(size_t i)
{
void *p = malloc(i);
if(p == NULL) return 0;
free(p);
return 1;
}
// later
if(can_alloc(10))
{
char *c = malloc(10); // no need to verify, we already did?
memcpy(c, "something", 10);
}
Run Code Online (Sandbox Code Playgroud)
这主要是出于好奇.我没有计划将此用于任何事情,但我相信它应该保证能够正常工作,并且确实可以提供信息.
我有一个如下所示的方法.for循环总是让编译器去"内联请求"吗?
inline void getImsiGsmMapFrmImsi
(
const string& imsiForUEDir,
struct ImsiGsmMap& imsiGsmMap
)
{
for (int i = 0 ; (unsigned)i < imsiForUEDir.length() - 1 ; i++)
{
imsiGsmMap.value[i] = imsiForUEDir[i] - '0' ;
}
imsiGsmMap.length = imsiForUEDir.length() - 1 ;
}
Run Code Online (Sandbox Code Playgroud) 这就是我认为++
运营商所做的
a++; // a+=1 after calculating this line
++a; // a+=1 before calcuating this line
我正在努力学习指针,我认为我误解了一些东西.
int a=10;
int arr[3]={0,1,2};
int *ptr;
ptr=arr;
printf("%d,%d,%d,%d\n",a++,a++,++a,++a);
printf("%d,%d,%d\n", ptr[0],ptr[1],ptr[2]);
printf("%d,%d,%d,%d,%d,%d", * ptr++, ( * ptr)++, ++ * ptr, ++( * ptr), *++ptr, * ptr);
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
12, 12, 12, 12
0,1,2
3,3,3,3,3,3,3
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.就是这样:
13,12,14,14
0,1,2
4,3,2,2,2,2
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
c ×4
c++ ×3
mod-rewrite ×2
templates ×2
apache ×1
boost ×1
css ×1
declaration ×1
header ×1
heap ×1
inline ×1
javascript ×1
loops ×1
malloc ×1
nested-loops ×1
optimization ×1
pointers ×1
regex ×1
sourceforge ×1
stack ×1
while-loop ×1