我总是想知道为什么这样一个简单而基本的操作,比如交换两个变量的内容,并不是内置于许多语言中的.
它是计算机科学课程中最基本的编程练习之一; 它在很多算法中被大量使用(例如排序); 每隔一段时间就需要它,并且必须使用临时变量或使用模板/泛型函数.
它甚至是许多处理器上的基本机器指令,因此具有临时变量的标准方案将得到优化.
已经创建了许多不太明显的运算符,例如赋值运算符(例如+ =,可能是为了反映累积的机器指令而创建的,例如添加ax,bx),或者?? C#中的运算符.
那么,原因是什么?或者它确实存在,我总是错过它?
我正在写一个非常简单的服务器,它会一直循环,直到按下Ctrl-C.我想让ctrl-c的信号处理程序关闭打开的套接字并关闭服务器,但我不知道信号处理程序的范围是什么,我不喜欢声明套接字的想法(s)我需要接近全球化.
有人可以提供建议吗?有没有一些标准的方法来做到这一点?
假设我开发了一个用Python编写的通用最终用户实用程序.以前,我只有一个版本适用于Python 2.3之后的版本.可以说,"如果需要,请下载Python,然后运行此脚本".源代码管理中只有一个版本的脚本(我正在使用Git)来跟踪.
使用Python 3,这不再是必然的.在可预见的未来,我需要同时开发两个不同的版本,一个适用于Python 2.x,另一个适用于Python 3.x. 从发展的角度来看,我可以想到几个选择:
我目前倾向于选项3,因为前两个将涉及很多容易出错的单调乏味.但是选项3似乎很乱,我的源代码控制系统应该是为我管理补丁.
对于分发包装,有更多选项可供选择:
我现在再次倾向于选项3,尽管我还没有尝试开发这样的存根加载器.
还有其他想法吗?
整个测试代码包含在main.cpp中,如下所示:
#include <iostream>
using std::cout;
using std::endl;
void f(int i) {
int* pi = new int;
*pi = i;
std::cout << "*pi = " << *pi << std::endl;
}
int main(int argc, char *argv[]) {
int i = 0;
while (i < 10000) {
f(i);
++i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译没有优化-O0(来自Eclipse Qt项目):
g++ -c -pipe -O0 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -Irelease -o release/main.o main.cpp
Run Code Online (Sandbox Code Playgroud)
然后链接如下:
g++ -Wl,-O0 -o test release/main.o …Run Code Online (Sandbox Code Playgroud) struct hostent *lh = gethostbyname(hostname);
int socketDescriptor = socket(AF_INET,SOCK_STREAM, 0);
sockaddr_in socketInfo;
memset(&socketInfo, 0, sizeof(socketInfo));
socketInfo.sin_family = AF_INET;
socketInfo.sin_addr.s_addr = ((in_addr *)(lh->h_addr))->s_addr;
socketInfo.sin_port = htons(portNumber);
connect(socketDescriptor,&socketInfo,sizeof(socketInfo));
Run Code Online (Sandbox Code Playgroud)
在尝试编译时,我收到以下错误:
error: cannot convert ‘sockaddr_in*’ to ‘const sockaddr*’ for argument ‘2’ to ‘int connect(int, const sockaddr*, socklen_t)’
事情看起来"按书",但我遗漏了一些东西(显然).它是什么?
我对鸟的运动进行了500次观察.我想预测这只鸟的第501次运动是什么.我在网上搜索,我想这可以通过使用HMM完成,但我没有任何关于该主题的经验.任何人都可以解释用于解决此问题的算法的步骤吗?
我已经做了一些挖掘,我看到的主要想法是使用setuid/getuid并使用授权服务(由于某种原因,在编译时给出了符号错误,但现在似乎已弃用).
我的应用程序需要能够在某一点请求root访问权限(用于访问原始磁盘驱动器),最好是使用OS X身份验证对话框(我是OS X的新手,所以我不知道该怎么称呼它).
对于我的一个项目,我制作了一个QWebView.一切都运行正常,但是当我在学校使用它时,我收到一个错误,因为没有定义代理.如何在Firefox和IE中自动检测代理?
我发现了这个QNetworkProxyFactory:
setUseSystemConfiguration(bool enable)
Run Code Online (Sandbox Code Playgroud)
但我找不到如何使用它.
我目前正在攻读CS课程的期末考试,而且我遇到了一个关于C++ #ifndef语法的小问题(可能是主要的?).
当我将#infndef用作#include后卫时,我已经查看了#infndef的语法,网上的大多数人都说:
#ifndef HEADER_H
#define "header.h"
...
#endif
Run Code Online (Sandbox Code Playgroud)
但我班级的教程幻灯片显示的例子如下:
#ifndef __HEADER_H__
#define "header.h"
...
#endif
Run Code Online (Sandbox Code Playgroud)
我想知道两者之间的差异(如果有的话).考试很可能会让我写一个#include后卫,而且我知道传统的智慧只是与教授/导师所说的一致,但如果在编译过程中存在差异,我想知道.
以下是我在端口587上连接到gmail的smtp服务器的当前代码.发出STARTTLS命令后,我将如何完成协商TLS会话并开始发出命令,如AUTH LOGIN和MAIL FROM?我已经省略了我的Base64编码的gmail用户名,并将其替换为我的代码底部附近的xxxxxxxx.
我这个程序的输出是:
220 mx.google.com ESMTP y10sm3296641yhd.6
250-mx.google.com为您服务,[75.66.47.144]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
220 2.0.0准备启动TLS
from socket import *
import ssl
msg = "\r\n smtp.."
endmsg = "\r\n.\r\n"
# Mailserver hostname and port to be used.
mailserver = ("smtp.gmail.com", 587)
# Create a socket and create an active TCP connection with the mailserver
clientSocket = socket(AF_INET, SOCK_STREAM);
clientSocket.connect(mailserver)
# Read server response
recv = clientSocket.recv(1024)
print recv
if recv[:3] != '220':
print '220 reply not received from server.' …Run Code Online (Sandbox Code Playgroud)