#include<iostream>
using namespace std;
int main()
{
int *p,*c;
p=(int*)10;
c=(int*)20;
cout<<(int)p<<(int)c;
}
Run Code Online (Sandbox Code Playgroud)
有人问我"上面代码出了什么问题?" 我无法理解.有人请帮帮我.
Bjarne Stroustrup在他的C++ Style and Technique FAQ中写道,强调我的:
因为C++支持几乎总是更好的替代方案:"资源获取是初始化"技术(TC++ PL3第14.4节).基本思想是通过本地对象表示资源,以便本地对象的析构函数将释放资源.这样,程序员就不会忘记释放资源.例如:
Run Code Online (Sandbox Code Playgroud)class File_handle { FILE* p; public: File_handle(const char* n, const char* a) { p = fopen(n,a); if (p==0) throw Open_error(errno); } File_handle(FILE* pp) { p = pp; if (p==0) throw Open_error(errno); } ~File_handle() { fclose(p); } operator FILE*() { return p; } // ... }; void f(const char* fn) { File_handle f(fn,"rw"); // open fn for reading and writing // use file through f }
在系统中,我们需要为每个资源提供"资源句柄"类.但是,我们不必为每次获取资源都有一个"finally"子句.在现实系统中,资源获取比资源种类多得多,因此"资源获取是初始化"技术导致的代码少于使用"最终"构造的代码.
请注意,Bjarne写的"几乎总是更好"而不是"总是更好".现在我的问题是:finally …
首先,让我说我是Python的初学者.我从来没有学过这门语言,我只是想到"当它出现什么困难"时,谷歌只提供Python片段来解决我的问题.:)
我有一堆Maildir格式的邮箱(来自我的旧网络主机上的邮件服务器的备份),我需要从这些邮箱中提取电子邮件.到目前为止,我发现最简单的方法是将它们转换为Thunderbird支持的mbox格式,而且似乎Python有几个用于读/写这两种格式的类.似乎很完美.
Python文档甚至有这个小代码片段完全符合我的需要:
src = mailbox.Maildir('maildir', factory=None)
dest = mailbox.mbox('/tmp/mbox')
for msg in src: #1
dest.add(msg) #2
Run Code Online (Sandbox Code Playgroud)
除了它不起作用.这里就是我完全没有关于Python的知识集.在一些消息,我得到的迭代过程中的UnicodeDecodeError(即,当它试图读取msg
从src
上线#1
).在其他情况下,我在尝试添加msg
到dest
(line #2
)时遇到UnicodeEncodeError .
显然,它对使用的编码做了一些错误的假设.但我不知道如何在邮箱上指定编码(就此而言,我不知道编码应该是什么,但是一旦我找到了实际指定编码的方法,我就可以想出来).
我得到类似于以下的堆栈跟踪:
File "E:\Python30\lib\mailbox.py", line 102, in itervalues
value = self[key]
File "E:\Python30\lib\mailbox.py", line 74, in __getitem__
return self.get_message(key)
File "E:\Python30\lib\mailbox.py", line 317, in get_message
msg = MaildirMessage(f)
File "E:\Python30\lib\mailbox.py", line 1373, in __init__
Message.__init__(self, message)
File "E:\Python30\lib\mailbox.py", line 1345, in __init__
self._become_message(email.message_from_file(message))
File "E:\Python30\lib\email\__init__.py", line 46, in …
Run Code Online (Sandbox Code Playgroud) 根据John C. Mitchell的说法 - 编程语言中的概念,
[...] Java保证在创建对象时调用构造函数.[...]
这被指向Java的特性,使其在行为上与C++不同.所以我必须争辩说,在某些情况下,即使创建了该类的对象,C++也不会为类调用任何构造函数.
我认为这种情况发生在继承发生时,但我无法找出这种情况的例子.
你知道任何一个例子吗?
好的:我对C++和静态语言都很陌生.来自多年的红宝石(和其他动态语言),我不知道这是否可能.
我一直在制作游戏状态系统......好吧游戏.我希望系统能够让我轻松剪切并粘贴到其他游戏中,而无需进行任何(或极少数)更改.
我想要改进的两件事是状态切换的方式以及状态指针的保存方式.
可能存在任意数量的状态,但在内存中始终存在至少2到3个状态.
丑陋的1号.
目前我有一个状态管理器类,里面有这样的东西:
void StateManager::changeState(StateID nextStateID)
{
// UNFOCUS THE CURRENT STATE //
if (currentState())
{
currentState()->onUnFocus();
// DESTROY THE STATE IF IT WANTS IT //
if(currentState()->isDestroyedOnUnFocus()) {
destroyCurrentState();
}
}
if (m_GameStates[nextStateID]) {
// SWITCH TO NEXT STATE //
setCurrentState(nextStateID);
}
else
{
// CREATE NEW STATE //
switch (nextStateID)
{
case MainMenuStateID:
m_GameStates[MainMenuStateID] = new MainMenuState;
break;
case GameStateID:
m_GameStates[MainMenuStateID] = new GameStates;
break;
};
setCurrentState(nextStateID);
}
// FOCUS NEXT STATE //
currentState()->onFocus();
}
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但我觉得它不是很好. …
请考虑以下代码:
#include <iostream>
using namespace std;
class Test {
static int count;
int id;
public:
Test() {
count++;
id = count;
cout << "Constructing object number " << id << endl;
if(id == 4)
throw 4;
}
~Test() { cout << "Destructing object number " << id << endl; }
};
int Test::count = 0;
int main() {
try {
Test array[5];
} catch(int i) {
cout << "Caught " << i << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下输出:
Constructing object number …
Run Code Online (Sandbox Code Playgroud) 我们有一个(Linux)服务器运行两个进程,A和B.目前,客户端建立到进程A的连接,进程A然后将生成的套接字的文件描述符传递给进程B,允许进程B使用现有的fd/socket无缝通信与客户.然后,客户端和进程B执行TLS握手并继续讨论生成的TLS连接.
(我在这里留下了大量的细节,但对了,还有就是对具有进程A充当一个中介一个很好的理由,而不是只连接到直接处理B)
现在,因为<long complicated story involving new client applications and websockets>
看起来我们可能必须在进程A中执行TLS握手,然后将已建立的TLS连接传输到进程B.
那可能吗?可以复制底层套接字的文件描述符(我们已经这样做了),并且至少在理论上,内部TLS状态数据也可以被复制并用于重建进程B中的TLS连接,从而有效地接管连接.
但OpenSSL是否暴露了这样的设施?我发现这个函数d2i_SSL_SESSION
似乎对OpenSSL会话对象做了类似的事情,但对于OpenSSL来说还不是新手,我不确定这是否足够.会议,背景,BIO和其他一些复杂的术语涉及到.需要多少序列化并转移到流程B才能使其正常工作?如何在实践中完成?
切换需要对客户端100%透明:它必须简单地对给定的IP /端口执行SSL握手,然后继续讨论生成的套接字,而不知道一个进程接受连接并执行TLS握手,然后另一个握手处理所有后续通信.
哪种编程领域最适合哪种语言?
我喜欢C++和C#,但我更喜欢使用C#,因为.NET.
我的问题是你什么时候使用C++?什么时候使用C#?
因此,如果您为公司提供财务申请,您将使用C#?(在不下载第三方库的情况下设计表单并连接到数据库很容易,如果你制作高级算法,你会使用C++来提高速度吗?
这是我的想法.我刚观看了视频@ http://www.academicearth.org,似乎大学更喜欢使用C++进行机器学习.
你们怎么看待它?什么是行业观点.
我已经阅读了许多关于引用和指针之间的区别以及何时使用哪些内容的讨论.他们似乎都从分析两者的行为中得出了他们的结论.
但是我仍然想知道语言设计者的想法.这个设计的主要动机是什么?在什么情况下它打算使用?也许答案已经包含在我提到的讨论中,但我想知道哪些是真实的.
PS只要指针在C++中,引用是否有历史记录?它起源于一开始还是作为某些情况的补丁?非常感谢.