嗯,C++ 不太适合小型临时程序,因为它没有提供太多的基础结构。您打算在标准库之上创建自己的基础结构(例如,甚至只是简单的集合!)。或者使用一些 3 rd方库,即您的选择。
因此,虽然 Python 附带了电池,但对于 C++,接受特定提供的电池没有很大的压力(因为没有),但您至少必须选择电池。
对于基本代码,Python 片段
CONFIRMATIONS = ("yes", "yeah", "yep", "yesh", "sure", "yeppers", "yup")
DECLINATIONS = ("no", "nope", "too bad", "nothing")
response = raw_input( "yes or no? " )
if response in CONFIRMATIONS:
pass # doSomething()
elif response in DECLINATIONS:
pass # doSomethingElse()
else:
pass #doAnotherThing()
在 C++ 中可以看起来像这样:
typedef Set< wstring > Strings;
Strings const confirmations = temp( Strings() )
<< L"yes" << L"yeah" << L"yep" << L"yesh" << L"sure" << L"yeppers" << L"yup";
Strings const declinations = temp( Strings() )
<< L"no" << L"nope" << L"too bad" << L"nothing";
wstring const response = lineFromUser( L"yes or no? " );
if( isIn( confirmations, response ) )
{
// doSomething()
}
else if( isIn( declinations, response ) )
{
// doSomethingElse()
}
else
{
// doAnotherThing()
}
但是,它依赖于已定义的一些基础结构,例如Set
类:
template< class TpElem >
class Set
{
public:
typedef TpElem Elem;
private:
set<Elem> elems_;
public:
Set& add( Elem const& e )
{
elems_.insert( e );
return *this;
}
friend Set& operator<<( Set& s, Elem const& e )
{
return s.add( e );
}
bool contains( Elem const& e ) const
{
return (elems_.find( e ) != elems_.end());
}
};
template< class Elem >
bool isIn( Set< Elem > const& s, Elem const& e )
{
return s.contains( e );
}
我使用了一个,operator<<
因为截至 2012 年 Visual C++ 不支持 C++11 花括号列表初始化。
这里set
来自std::set
标准库。
而且,嗯,temp
事情:
template< class T >
T& temp( T&& o ) { return o; }
而且,更多的基础设施,lineFromUser
功能:
wstring lineFromUser( wstring const& prompt )
{
wcout << prompt;
wstring result;
getline( wcin, result )
|| throwX( "lineFromUser: std::getline failed" );
return result;
}
其中,依赖于一个throwX
函数:
bool throwX( string const& s ) { throw runtime_error( s ); }
但这就是全部,除了你必须将我首先展示的 C++ 代码放入某个函数中,比如说,调用 that cppMain
,然后从你的main
函数中调用它(甚至更多的基础结构要定义!):
int main()
{
try
{
cppMain();
return EXIT_SUCCESS;
}
catch( exception const& x )
{
wcerr << "!" << x.what() << endl;
}
return EXIT_FAILURE;
}
所以,要在 C++ 中正确地做事,有一些高昂的开销。
C++ 主要用于大型程序,而 Python(我经常使用)用于小型程序。
是的,我知道有些学生可能会或将会对这种说法做出反应,或者他们觉得说它对小程序没有好处是对 C++ 的诽谤(嘿,我一直在做这些!)和/或这是一个诽谤 Python 说它对大型系统没有好处(嘿,你没听说过 YouTube,你这个愚蠢的无能的人吗?),但事实就是这样。有时用锤子拧螺丝会更方便,所以有时我用 C++ 做一些小任务。但一般来说那是因为在手边的机器上安装 Python 会比较麻烦,而且一般来说,要做一个任务 X,最好使用专为 X 类工作而设计的工具。