我有一位同事在C中检查这样的代码(语法#1):
(*(*(*p_member).p_member).p_member).member
Run Code Online (Sandbox Code Playgroud)
当我问他为什么不使用 - >(语法#2)时:
p_member->p_member->p_member->member
Run Code Online (Sandbox Code Playgroud)
他得到了真正的防守,指出语法#2比#1更复杂......我最终改变了他的代码,因为我不得不修改它,不能读它,然后他就疯了,我居然感动呢?
SO社区更喜欢哪种语法?两者都有效,但我发现语法#2更具可读性.
由于问题是主观的,我将此设置为社区维基.
我有一个应用程序,使用TCPClient和它的底层NetworkStream发送通过TCP套接字终止换行的消息.
数据从实时数据流每100ms流入大约28k用于监视.
我已经删除了不相关的代码,这基本上是我们读取数据的方式:
TcpClient socket; // initialized elsewhere
byte[] bigbuffer = new byte[0x1000000];
socket.ReceiveBufferSize = 0x1000000;
NetworkStream ns = socket.GetStream();
int end = 0;
int sizeToRead = 0x1000000;
while (true)
{
bytesRead = ns.Read(bigbuffer, end, sizeToRead);
sizeToRead -= bytesRead;
end += bytesRead;
// check for newline in read buffer, and if found, slice it up, and return
// data for deserialization in another thread
// circular buffer
if (sizeToRead == 0)
{
sizeToRead = 0x1000000;
end = 0;
}
} …Run Code Online (Sandbox Code Playgroud) 考虑使用数组的以下算法:
class MyType;
{
// some stuff
}
class MySubType:MyType
{
// some stuff
}
void foo(MyType** arr, int len)
{
for (int i = 0;i<len;i++)
// do something on arr[i]->
}
void bar()
{
MySubType* arr[10];
// initialize all MySubType*'s in arr
foo(&arr, 10);
}
Run Code Online (Sandbox Code Playgroud)
这里没什么太花哨的.我的问题是 - 如何使用模板执行此操作?
void foo(std::vector<MyType>& s)
{
std::vector<MyType>::iterator i;
for (i = s.begin(); i != s.end(); i++)
// do stuff on *i
}
Run Code Online (Sandbox Code Playgroud)
所以,在酒吧,我不能这样做:
void bar()
{
std::vector<MySubType> s;
foo(s); // compiler error
} …Run Code Online (Sandbox Code Playgroud)