我想知道:"三元运算符什么时候比使用'if-else'块更差?"
我想,它可能是调试时间(例如三元运算符不适合调试)
这样的美容有用吗?也许在某些情况下,简单的if-else块更适合使用?
谢谢
我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.
在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?
另外,我怎样才能在纯C中实现这一目标?
我正在训练在一个网站上解决奥运IT谜语.
我提供了两个解决方案:
- C#
Run Code Online (Sandbox Code Playgroud)
- PHP
Run Code Online (Sandbox Code Playgroud)
当网上判断显示,PHP版本更快!!! 为什么?
C#:109毫秒3000 Kb
PHP:45毫秒0 Kb
怎么会这样?
我已经定义了这样的功能:
template<typename T>
void SwapMe(T *first, T *second)
{
T tmp = *first;
*first = *second;
*second = tmp;
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
SwapMe(&data[i], &data[j]);
Run Code Online (Sandbox Code Playgroud)
如你所见,我没有明确使用,SwapMe<T>(...);但确实有效!
为什么C++标准允许避免显式指定参数的类型?
我在VS中创建了新的Win32项目,并为此目的选择了动态库(*.dll).
我在主文件中定义了一些导出函数:
__declspec(dllexport)
int TestCall(void)
{
int value = 4 / 2;
std::cout << typeid(value).name() << std::endl;
return value;
}
__declspec(dllexport)
void SwapMe(int *first, int *second)
{
int tmp = *first;
*first = *second;
*second = tmp;
}
Run Code Online (Sandbox Code Playgroud)
当我看到dumpin/exports时,我得到了:
ordinal hint RVA name
1 0 00001010 ?SwapMe@@YAXPEAH0@Z
2 1 00001270 ?TestCall@@YAHXZ
Run Code Online (Sandbox Code Playgroud)
我正在调用C#这样的版本:
[DllImport(@"lib1.dll", EntryPoint = "?TestCall@@YAHXZ",
CallingConvention = CallingConvention.Cdecl)]
static extern int TestCall();
Run Code Online (Sandbox Code Playgroud)
这不是使用导出方法的正确形式.我在C++ DLL项目中为导出方法生成这样的名称失败了吗?
有:
[DllImport("OpenAL32.dll")]
static extern void alcOpenDevice(char*[] devicename);
Run Code Online (Sandbox Code Playgroud)
想把这个名字发送给像smth那样的函数:
char[] data = "Hello!".ToCharArray();
char*[] txt = &data;
Run Code Online (Sandbox Code Playgroud)
但得到错误:
无法隐式转换
char[] *为char * []
(有趣的错误,因为C#编译器拒绝char[] *在/ unsafe模式中定义:))
不能获取地址,获取大小,或声明指向托管类型的指针(
char[])
PS
何时char成为管理?这是一个结构,不是吗?
public struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>
Run Code Online (Sandbox Code Playgroud)
虽然编译器显示有关声明指向托管类型(char[])的指针的信息.我只能建议当类型是一个数组时,CLR可能会像管理类型一样呈现它,但听起来非常疯狂.
刚打开刚才编译的.net应用程序并在文件的二进制结构中找到了下一个:

我刚刚使用我的HTTP解析器工具,我正在使用子串搜索算法进行训练,并在不同的地方找到了一些人类"Ivan Medvedev"的真实姓名.
它是什么?
请看这里的场景,请:http://social.microsoft.com/Forums/getfile/3600/ 为什么它不匹配?
我正在尝试使用SSL而不使用libs作为OpenSSL等...而且我在第一步有来自客户端的Hello消息有错.
来自technet:
It must consist of:
ClientVersion 3,1
ClientRandom[32]
SessionID: None (new session)
Suggested Cipher Suites:
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
Suggested Compression Algorithm: NONE
Run Code Online (Sandbox Code Playgroud)
在我的代码(C/C++)中,我以这种方式创建了消息:
char *request = "ClientVersion 3,1\r\nClientRandom[32]\r\n
SessionID: None (new session)\r\n
Suggested Cipher Suites:\r\n
TLS_RSA_WITH_3DES_EDE_CBC_SHA\r\n
TLS_RSA_WITH_DES_CBC_SHA\r\n
Suggested Compression Algorithm: NONE\r\n";
Run Code Online (Sandbox Code Playgroud)
但是在recv()函数之后,我的结果是0,所以我的消息结构有什么问题?
PS在HTTP-proto中有一个地方,当必须是双\ r \n(分割标题和正文消息),可能是,必须有这样的东西吗?
我试图在C#中实现Knuth-Morris-Pratt算法,类似于纯C中的实现.
请不要告诉我关于正则表达式和C#中的内存工作.因为,本主题的目的不是C#特性的真实和有用,而是关于C#中指针的工作,以及关于学习这些特性的内存工作.
让我向您展示C#和纯C的实现.
Pure C http://ideone.com/FVAzU
我对Pure C中的版本没有任何问题,它没有问题,但没有C#版本.
我在这行上遇到了C#的问题:
int*[] d = new int*[M * sizeof(int)];
*d[0] = 0;
Run Code Online (Sandbox Code Playgroud)
我正在捕捉NullReferenceException是通过将0值设置为*d [0]来处理的.
我看过这个参考:
http://msdn.microsoft.com/en-en/library/system.nullreferenceexception.aspx
尝试取消引用空对象引用时引发的异常.
我完全不明白为什么这个东西在我的C#代码中是空的?
我已经定义了*d指向int []数组的指针并使用new []运算符为此分配了内存,为什么它告诉我,如果已经分配了内存,我将取消引用空对象引用?
还有一个关于在C#中明确删除指针的问题.
我知道,它可以用固定的方式完成,但如果我想要这个而不使用这个关键字?
我记得,我必须为此调用Dispose()方法(但是我没有找到这个方法),设置为null并调用GC.Collect().这是正确的方法吗?
谢谢,
最好的祝福!
c# ×4
c++ ×2
pinvoke ×2
pointers ×2
.net ×1
algorithm ×1
arguments ×1
arrays ×1
binary ×1
block ×1
c ×1
cdecl ×1
compare ×1
compression ×1
dll ×1
dllexport ×1
dumpbin ×1
exe ×1
explicit ×1
file ×1
function ×1
if-statement ×1
linq ×1
match ×1
operators ×1
php ×1
runtime ×1
ssl ×1
templates ×1
unsafe ×1
xml ×1