在C中使用qsort我们传递比较函数,例如
int cmp(const void*, const void*);
Run Code Online (Sandbox Code Playgroud)
qsort的protoype期望一个int(*)(const void*,const void*)所以我们调用:
qsort(..., cmp);
Run Code Online (Sandbox Code Playgroud)
但同样有效的是:
qsort(..., &cmp);
Run Code Online (Sandbox Code Playgroud)
如果我们在C++中传入静态成员函数,这就是我们必须要做的.Kernighan&Ritchie(第2版,5.11"Pointers To Functions"p119)声明"因为[cmp]已知是一个函数,所以&运算符不是必需的,就像在数组名称之前不需要它一样. "
是否有人对此感到有点不舒服(特别是关于型号安全性)?
任何有关这方面的想法将不胜感激:
std::string s1 = "hello";
std::string s2 = std::string(s1);
Run Code Online (Sandbox Code Playgroud)
我现在期望这两个字符串是独立的,即我可以将",world"附加到s2,而s1仍然会读取"hello".这是我在Windows和Linux上发现的但是在HP_UX机器上运行代码似乎s2和s1是相同的字符串,所以修改s2会改变s1.
这听起来绝对疯狂,有人见过类似的东西吗?