Questions tagged «c++»

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

6
演员模型:为什么Erlang / OTP特别?你能用另一种语言吗?
我一直在研究Erlang / OTP,因此,一直在阅读(好的,略读一下)演员模型。 据我了解,参与者模型只是一组功能(在Erlang / OTP中称为“进程”的轻量级线程中运行),它们仅通过消息传递相互通信。 用C ++或任何其他语言实现这似乎微不足道: class BaseActor { std::queue<BaseMessage*> messages; CriticalSection messagecs; BaseMessage* Pop(); public: void Push(BaseMessage* message) { auto scopedlock = messagecs.AquireScopedLock(); messagecs.push(message); } virtual void ActorFn() = 0; virtual ~BaseActor() {} = 0; } 每个进程都是派生BaseActor的实例。Actor仅通过消息传递相互通信。(即推动)。参与者在初始化时向中心地图注册自己,该地图允许其他参与者找到他们,并允许中心功能贯穿他们。 现在,我知道我在这里遗漏了,或者更确切地说,是在掩盖一个重要问题,即:缺乏屈服意味着单个Actor可能不公平地消耗过多时间。但是跨平台协程是C ++中使这一点变得困难的主要因素吗?(例如,Windows具有纤维。) 我还有什么想念的吗,或者模型真的很明显吗?

15
什么时候整数<->指针强制转换正确?
民间传说说: 类型系统存在是有原因的。整数和指针是不同的类型,在大多数情况下,整数和指针之间的转换是不当行为,可能表示设计错误,应避免使用。 即使执行了这样的强制转换,也不应假设整数和指针的大小(强制void*转换int为使代码在x64上失败的最简单方法),而不int应该使用intptr_t或uintptr_tfrom stdint.h。 知道这一点,什么时候执行这样的转换真正有用? (注意:对于可移植性的价格,较短的代码并不算作“实际有用”。) 我知道一种情况: 一些无锁的多处理器算法利用了一个事实,即2个字节以上的指定指针具有一定的冗余性。例如,它们然后将指针的最低位用作布尔标志。对于具有适当指令集的处理器,这可以消除对锁定机制的需要(如果指针和布尔标志是分开的,则这是必要的)。 (注意:这种做法甚至可以通过java.util.concurrent.atomic.AtomicMarkableReference在Java中安全地进行) 更多的东西?
77 c++  c  pointers  casting 

5
如何对可变参数模板函数的异构参数包进行通用计算?
前提: 在使用了可变参数模板后,我意识到,要完成琐碎的元编程任务之外的任何事情,很快就会变得很麻烦。特别是,我发现自己希望的执行方式上的参数包一般操作如迭代,拆分,循环在一个std::for_each样的方式,等等。 在观看了C ++和Beyond 2012的Andrei Alexandrescu的关于static ifC ++(从D编程语言中借用的结构)的可取性的演讲之后,我感到有些东西static for也将派上用场-我感到更多这样的static结构可以带来利益。 于是我开始想知道如果有一种方法来实现这样的一个可变参数模板函数的参数包(伪代码): template&lt;typename... Ts&gt; void my_function(Ts&amp;&amp;... args) { static for (int i = 0; i &lt; sizeof...(args); i++) // PSEUDO-CODE! { foo(nth_value_of&lt;i&gt;(args)); } } 它将在编译时转换为如下形式: template&lt;typename... Ts&gt; void my_function(Ts&amp;&amp;... args) { foo(nth_value_of&lt;0&gt;(args)); foo(nth_value_of&lt;1&gt;(args)); // ... foo(nth_value_of&lt;sizeof...(args) - 1&gt;(args)); } 原则上,static_for将允许进行更精细的处理: template&lt;typename... Ts&gt; …

13
.h文件在C中的异常用法
在阅读有关过滤的文章时,我发现.h文件有一些奇怪的用法-使用它填充系数数组: #define N 100 // filter order float h[N] = { #include "f1.h" }; //insert coefficients of filter float x[N]; float y[N]; short my_FIR(short sample_data) { float result = 0; for ( int i = N - 2 ; i &gt;= 0 ; i-- ) { x[i + 1] = …
77 c++  c 

10
什么时候使用shared_ptr和什么时候使用原始指针?
class B; class A { public: A () : m_b(new B()) { } shared_ptr&lt;B&gt; GimmeB () { return m_b; } private: shared_ptr&lt;B&gt; m_b; }; 假设B是一个在语义上不应存在于A生存期之外的类,即,对于B本身存在绝对是没有意义的。应该GimmeB返回ashared_ptr&lt;B&gt;或a B*? 通常,是否最好完全避免在C ++代码中使用原始指针来代替智能指针? 我认为,shared_ptr仅在显式转让或所有权共享时才应使用,在函数分配一些内存,用一些数据填充并返回它的情况下,我认为这种情况很少见,并且理解在呼叫者和被呼叫者之间,前者现在对该数据“负责”。

2
为什么std :: transform和类似函数将'for'循环增量转换为(void)?
(void) ++__result以下代码的目的是什么? std :: transform的实现: // std::transform template &lt;class _InputIterator, class _OutputIterator, class _UnaryOperation&gt; inline _LIBCPP_INLINE_VISIBILITY _OutputIterator transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __op) { for (; __first != __last; ++__first, (void) ++__result) *__result = __op(*__first); return __result; }
77 c++ 

6
C#中的C ++联合
我正在将用C ++编写的库转换为C#,并且关键字“联合”存在一次。在结构中。 将其转换为C#的正确方法是什么?它是做什么的?看起来像这样; struct Foo { float bar; union { int killroy; float fubar; } as; }
77 c#  c++  unions 


2
“ template <>”和“ template”不带括号-有什么区别?
假设我已经声明: template &lt;typename T&gt; void foo(T&amp; t); 现在,两者之间有什么区别 template &lt;&gt; void foo&lt;int&gt;(int&amp; t); 和 template void foo&lt;int&gt;(int&amp; t); 在语义上?在没有上下文的情况下,无括号的模板和无括号的模板是否具有其他语义? 相关信息: 如何强制C ++模板的特定实例实例化?

15
公共数据成员与Getters,Setters
我目前在Qt等C ++中工作。我正在使用具有私有数据成员和公共成员函数的类。我为班级中的数据成员提供了公共获取器和设置器。 现在我的问题是,如果我们在类中具有数据成员的getter和setter方法,那么将那些数据成员设置为私有的意义何在?我同意在基类中拥有私有数据成员听起来很合逻辑。但是除此之外,对我来说,拥有私人成员以及其获取者和设置者也是如此。 或者相反,我们是否可以将所有变量都公开,这样就根本不需要getter和setter?拥有这些是一种好习惯吗?我知道拥有私有成员可以确保数据抽象,但是拥有getter和setter实际上可以非常轻松地访问那些变量。欢迎对此提出任何建议。
77 c++  setter  getter 

3
如何格式化QString?
我想格式化Qt标签的字符串,我正在Qt上用C ++编程。 在ObjC中,我将编写如下内容: NSString *format=[NSString stringWithFormat: ... ]; 如何在Qt中做类似的事情?

11
检测TCP客户端断开连接
假设我正在运行一个简单的服务器,并accept()从客户端建立了连接。 告诉客户端何时断开连接的最佳方法是什么?通常,客户端应该发送关闭命令,但是如果客户端手动断开连接或完全失去网络连接怎么办?服务器如何检测或处理?
77 c++  sockets  tcp 

16
如何将CString和std :: string std :: wstring相互转换?
CString非常方便,同时std::string与STL容器更兼容。我正在使用hash_map。但是,hash_map不支持将CStrings作为键,因此我想将转换CString为std::string。 编写CString哈希函数似乎需要很多时间。 CString -----&gt; std::string 我怎样才能做到这一点? std::string -----&gt; CString: inline CString toCString(std::string const&amp; str) { return CString(str.c_str()); } 我对吗? 编辑: 这里有更多问题: 如何从转换wstring为CString,反之亦然? // wstring -&gt; CString std::wstring src; CString result(src.c_str()); // CString -&gt; wstring CString src; std::wstring des(src.GetString()); 这有什么问题吗? 此外,我该如何转换std::wstring为std::string,反之亦然?
77 c++  mfc  cstring  stdstring 

3
平凡,标准布局,POD
用外行的话来说,平凡类型,标准布局类型和POD有什么区别? 具体来说,我想确定是否new T与new T()任何模板参数不同T。哪种类型的性状is_trivial,is_standard_layout而且is_pod我应该选择? (作为附带的问题,这些类型特征中的任何一种都可以在没有编译器魔术的情况下实现吗?)

7
不能将枚举类用作unordered_map键
我有一个包含枚举类的类。 class Shader { public: enum class Type { Vertex = GL_VERTEX_SHADER, Geometry = GL_GEOMETRY_SHADER, Fragment = GL_FRAGMENT_SHADER }; //... 然后,当我在另一个类中实现以下代码时... std::unordered_map&lt;Shader::Type, Shader&gt; shaders; ...我得到一个编译错误。 ...usr/lib/c++/v1/type_traits:770:38: Implicit instantiation of undefined template 'std::__1::hash&lt;Shader::Type&gt;' 这是什么导致错误?
77 c++  c++11  map  enums  enum-class 

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.