我正在看一个C++类,它有以下几行:
while( x > y );
return x - y;
Run Code Online (Sandbox Code Playgroud)
x并且y是类型的成员变量volatile int.我不明白这个结构.
我在这里找到了代码存根:https://gist.github.com/r-lyeh/cc50bbed16759a99a226.我想这不保证是正确的甚至是工作.
作为C的新手,我很困惑何时投射指针实际上是好的.
据我所知,你几乎可以将任何指针类型转换为任何其他类型,编译器将允许你这样做.例如:
int a = 5;
int* intPtr = &a;
char* charPtr = (char*) intPtr;
Run Code Online (Sandbox Code Playgroud)
但是,通常这会调用未定义的行为(尽管它恰好在许多平台上运行).这说,似乎有一些例外:
void*自由地投射(?)char*自由地投射(?)(至少我在代码中看过它...).
那么指针类型之间的哪些转换在C 中不是未定义的行为?
编辑:
我试着研究C标准("6.3.2.3指针"一节,见http://c0x.coding-guidelines.com/6.3.2.3.html),但除了一点点之外,我并没有真正理解它void*.
EDIT2:
只是为了澄清:我明确地只询问"正常"指针,即不是关于函数指针.我意识到强制转换函数指针的规则是非常严格的.事实上,我已经问过:-):如果我转换函数指针,改变参数个数会发生什么
在Perl中,运算符s/用于替换字符串的一部分.现在s/将改变其参数(字符串).然而,我想要替换打印它的部分字符串,如
print "bla: ", replace("a","b",$myvar),"\n";
Run Code Online (Sandbox Code Playgroud)
replace在Perl中有这样的功能,或者其他一些方法吗?s/在这种情况下不会直接工作,我想避免使用辅助变量.有没有办法在线进行此操作?
我刚刚开始使用SOAP Web服务,偶然发现了WS-Addressing.
我已阅读维基百科页面,但我很难理解WS-Addressing的重点.
根据维基百科和Web上的各种来源,WS-Addressing允许将"寻址信息"或"路由信息"放入SOAP请求的标头中.
为什么这有用?如果我通过HTTP(或甚至通过SMTP或UDP)发送请求,那么我发送到的地址是将处理我的请求的服务器的地址,并且服务器可以简单地通过相同的通道进行回复.那么为什么需要寻址/路由信息呢?
我对一些真实世界(或多或少)WS-Addressing有用的例子特别感兴趣.
在JDK1.5之前的Java中,"Typesafe Enum"模式是实现只能获取有限数量值的类型的常用方法:
public class Suit {
private final String name;
public static final Suit CLUBS =new Suit("clubs");
public static final Suit DIAMONDS =new Suit("diamonds");
public static final Suit HEARTS =new Suit("hearts");
public static final Suit SPADES =new Suit("spades");
private Suit(String name){
this.name =name;
}
public String toString(){
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
(参见例如Bloch的Effective Java的第21项).
现在在JDK1.5 +中,"官方"方式显然是使用enum:
public enum Suit {
CLUBS("clubs"), DIAMONDS("diamonds"), HEARTS("hearts"), SPADES("spades");
private final String name;
private Suit(String name) {
this.name = name;
}
} …Run Code Online (Sandbox Code Playgroud) 我有时使用包含许多分支的源代码存储库,其中大多数分支都是旧的,通常不再相关.
在这些情况下,完整的分支列表git branch不是很有帮助.有没有办法只列出"活跃"分支?例如,只有在过去n天内收到提交的分支?理想情况下,列表将包括每个分支的最后提交日期,并指示分支是否已完全合并.
PS:我意识到这也可以通过删除"旧"分支来解决(例如,如何处理实验性非合并git分支?),但这可能并不总是实际的或在给定项目上被接受.
/* [1] */
int i = -1;
unsigned u = (unsigned)i;
/* [2] */
int i = -1;
unsigned u;
memcpy(&u, &i, sizeof i);
/* [3] */
int i = -1;
unsigned u = *(unsigned *)&i;
Run Code Online (Sandbox Code Playgroud)
为了将带符号的整数进行位复制到其未签名的伙伴,[1]应该可以在大多数机器上工作,但据我所知,这是不保证的行为.
[2] 应该做我想要的,但我想避免调用库函数的开销.
那怎么样[3]?它能有效地达到我想要的目的吗?
我已使用全局配置在我的系统上配置了帐户A,我可以从那里克隆我的所有回购.
现在我不想更改配置,我想克隆并使用我的用户名和密码执行帐户B的所有操作.我怎样才能做到这一点?
我试过了:
git clone username:passwordgit@github.com:*****/******.git
Run Code Online (Sandbox Code Playgroud)
但没有成功.
我希望这个jQuery插件可以工作,但它没有:
http://andowebsit.es/blog/noteslog.com/post/how-to-fix-the-resize-event-in-ie (旧链接为noteslog.com/post/how-to-fix-the-resize -event-in-ie).
我在他的网站上添加了评论,但他们已经过审核,所以你可能还没有看到它.
但无论如何,让我解释一下我的愿望.我想要在用户暂停调整大小和/或完成调整大小时触发"调整大小"类型的事件,而不是在用户主动拖动浏览器的窗口调整大小句柄时触发.我有一个相当复杂和耗时的OnResizeHandled函数我需要运行,但不能运行100次只是因为用户将窗口加宽了100px并且事件被激活了所有的移动像素.我想最好的选择是在用户完成调整大小后处理它.
Eclipse有一个选项可以警告赋值给方法的参数(在方法内),如:
public void doFoo(int a){
if (a<0){
a=0; // this will generate a warning
}
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
通常我尝试激活(并注意)几乎所有可用的编译器警告,但在这种情况下,我不确定它是否值得.
我看到了改变方法中参数的合法情况(例如:允许参数"取消设置"(例如null)并自动替换默认值),但很少会导致问题,除非它可能有点混淆在方法中间重新分配参数.
你使用这样的警告吗?为什么/为什么不呢?
注意:
避免这种警告当然等同于制作方法参数final(只有这是编译器错误:-)).那么这个问题为什么我要在Java中的方法参数上使用关键字"final"?可能是相关的.