Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

6
为什么我不能在C ++ 11中创建Lambda向量(相同类型)?
我试图创建一个lambda向量,但是失败了: auto ignore = [&]() { return 10; }; //1 std::vector<decltype(ignore)> v; //2 v.push_back([&]() { return 100; }); //3 直到第2行,它编译正常。但是第3行给出了编译错误: 错误:没有匹配的函数调用'std :: vector <main():: <lambda()>> :: push_back(main():: <lambda()>)' 我不需要函数指针的向量或函数对象的向量。但是,封装真正的lambda表达式的功能对象的矢量对我有用。这可能吗?
88 c++  vector  lambda  c++11 

10
致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-gd-1_51.lib'
似乎我无法使用它。我做了一个简单的控制台应用程序(取决于websocket++库),它需要Boost库..但是当我尝试编译时,我得到了: 致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-gd-1_51.lib' 但是,我做了bjam,在其中创建了lib,(boost_root)/stage/libs然后将lib的路径链接到了编译器C++/Additionnals includes。 如果我看(boost_root)/stage/libs文件 libboost_system-vc110-mt-gd-1_51.lib不在那儿。它被称为libboost_system-vc110-mt-sgd-1_51.lib。 任何的想法?
88 c++  boost 


3
默认值和零初始化混乱
我对value-&default-&zero-initialization感到非常困惑。特别是当他们采用不同的标准C ++ 03和C ++ 11(和C ++ 14)时。 我在这里引用并尝试扩展一个很好的答案Value- / Default- / Zero-Init C ++ 98和C ++ 03,使其更通用,因为如果有人可以帮助填写,它将对很多用户有所帮助需要差距才能很好地了解何时会发生什么? 简而言之,通过示例全面了解: 有时由new运算符返回的内存将被初始化,有时并不取决于您要更新的类型是POD(普通旧数据),还是它是包含POD成员并且正在使用a的类。编译器生成的默认构造函数。 在C ++ 1998中,有两种初始化类型:零初始化和默认初始化 在C ++ 2003中,第三种初始化类型是值初始化。 在C ++ 2011 / C ++ 2014中,仅添加了列表初始化,并且value- / default- / zero-initialization的规则有所更改。 承担: struct A { int m; }; struct B { ~B(); int m; }; …
88 c++  c++11  c++14  c++03  c++98 

2
当boost :: asio :: io_service运行方法阻塞/取消阻塞时感到困惑
作为Boost.Asio的初学者,我对感到困惑io_service::run()。如果有人可以向我解释此方法的阻止/取消阻止,我将不胜感激。文档指出: 该run()函数将阻塞,直到所有工作完成并且不再有要分派的处理程序,或者直到io_service停止为止。 多个线程可以调用该run()函数来建立线程池,线程池io_service可以从中执行处理程序。池中等待的所有线程都是等效的,并且io_service可以选择其中任何一个来调用处理程序。 从该run()函数正常退出意味着该io_service对象已停止(该stopped()函数返回true)。后续调用run(),run_one(),poll()或poll_one()将除非有预先调用立即返回reset()。 以下陈述是什么意思? [...]不再派遣处理程序[...] 在尝试了解的行为时io_service::run(),我遇到了这个示例(示例3a)。在其中,我观察到这些io_service->run()障碍并等待工作订单。 // WorkerThread invines io_service->run() void WorkerThread(boost::shared_ptr<boost::asio::io_service> io_service); void CalculateFib(size_t); boost::shared_ptr<boost::asio::io_service> io_service( new boost::asio::io_service); boost::shared_ptr<boost::asio::io_service::work> work( new boost::asio::io_service::work(*io_service)); // ... boost::thread_group worker_threads; for(int x = 0; x < 2; ++x) { worker_threads.create_thread(boost::bind(&WorkerThread, io_service)); } io_service->post( boost::bind(CalculateFib, 3)); io_service->post( boost::bind(CalculateFib, 4)); io_service->post( boost::bind(CalculateFib, 5)); work.reset(); …
88 c++  boost-asio 


5
std :: shared_ptr是否具有非原子等效项?为什么<memory>中没有一个?
这是一个由两部分组成的问题,全部有关std::shared_ptr: 1. 据我所知,std::shared_ptr是唯一的智能指针在&lt;memory&gt;这原子。我想知道是否有std::shared_ptr可用的非原子版本(我在中看不到任何内容&lt;memory&gt;,所以我也愿意接受标准之外的建议,例如Boost中的建议)。我知道boost::shared_ptr也是原子的(如果BOOST_SP_DISABLE_THREADS未定义),但是也许还有另一种选择?我正在寻找具有与相同语义std::shared_ptr但没有原子性的东西。 2.我理解为什么std::shared_ptr是原子的;很好。但是,这并不是在每种情况下都很好,并且C ++历来有“只为所用内容付费”的口号。如果我不使用多个线程,或者如果我使用多个线程但不跨线程共享指针所有权,那么原子智能指针就显得过分了。我的第二个问题是,为什么std::shared_ptrC ++ 11中没有提供非原子版本的?(假设有一个原因)(如果答案仅仅是“根本就没有考虑过非原子版本”或“没有人问过非原子版本”就可以了!)。 对于问题2,我想知道是否有人提出了非原子版本的shared_ptr(向Boost或标准委员会提出)(不是取代原子版本的shared_ptr,而是与之共存)而被否决了。具体原因。

14
C ++:将枚举值打印为文本
如果我有这样的枚举 enum Errors {ErrorA=0, ErrorB, ErrorC}; 然后我要打印到控制台 Errors anError = ErrorA; cout&lt;&lt;anError;/// 0 will be printed 但是我想要的是文本“ ErrorA”,我可以不使用if / switch来做到吗? 您对此有什么解决方案?
88 c++  enums 


2
模板类成员函数的显式专业化
我需要专门针对某种类型的模板成员函数(比方说double)。当类X本身不是模板类时,它可以正常工作,但是当我使它成为模板时,GCC开始给出编译时错误。 #include &lt;iostream&gt; #include &lt;cmath&gt; template &lt;class C&gt; class X { public: template &lt;class T&gt; void get_as(); }; template &lt;class C&gt; void X&lt;C&gt;::get_as&lt;double&gt;() { } int main() { X&lt;int&gt; x; x.get_as(); } 这是错误消息 source.cpp:11:27: error: template-id 'get_as&lt;double&gt;' in declaration of primary template source.cpp:11:6: error: prototype for 'void X&lt;C&gt;::get_as()' does not …

3
从DLL动态加载功能
我稍微看一下.dll文件,了解它们的用法,并试图了解如何使用它们。 我创建了一个.dll文件,其中包含一个函数,该函数返回一个名为funci()的整数 使用此代码,我(认为)我已将.dll文件导入到项目中(没有任何抱怨): #include &lt;windows.h&gt; #include &lt;iostream&gt; int main() { HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\Documents and Settings\\User\\Desktop \\fgfdg\\dgdg\\test.dll"); if (hGetProcIDDLL == NULL) { std::cout &lt;&lt; "cannot locate the .dll file" &lt;&lt; std::endl; } else { std::cout &lt;&lt; "it has been called" &lt;&lt; std::endl; return -1; } int a = funci(); return …
88 c++  winapi  dll 

7
为什么我们不能声明std :: vector <AbstractClass>?
我花了很多时间在C#中进行开发,但我注意到,如果您声明一个抽象类以便将其用作接口,则无法实例化此抽象类的向量来存储子类的实例。 #pragma once #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout &lt;&lt; "&lt;INSERT JOKE HERE&gt;"; } }; class FunnyContainer { private: std::vector &lt;IFunnyInterface&gt; funnyItems; }; 声明抽象类向量的行在MS VS2005中导致此错误: error C2259: 'IFunnyInterface' : …


5
为什么可以在复制构造函数中访问私有变量?
我了解到,只有在类中具有get函数时,我才能访问私有变量。但是,为什么我可以在复制构造函数中访问它呢? 例: Field::Field(const Field&amp; f) { pFirst = new T[f.capacity()]; pLast = pFirst + (f.pLast - f.pFirst); pEnd = pFirst + (f.pEnd - f.pFirst); std::copy(f.pFirst, f.pLast, pFirst); } 我的声明: private: T *pFirst,*pLast,*pEnd;


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.