草庐IT

c++ - 这个 AnonymousClass(variable) 声明中到底发生了什么?

尝试编译:classAnonymousClass{public:AnonymousClass(intx){}};intmain(){intx;AnonymousClass(x);return0;}从MSVC生成错误:foo.cpp(13):errorC2371:'x':redefinition;differentbasictypesfoo.cpp(12):seedeclarationof'x'foo.cpp(13):errorC2512:'AnonymousClass':noappropriatedefaultconstructoravailableg++的错误信息类似:foo.cpp

c++ - C++ 分析(google cpu perf tools)到底测量了什么?

我尝试开始使用GooglePerfTools来分析一些CPU密集型应用程序。这是一种统计计算,使用“ofstream”将每个步骤转储到一个文件中。我不是C++专家,所以我很难找到瓶颈。我的第一遍给出了结果:Total:857samples35741.7%41.7%35741.7%_write$UNIX200313415.6%57.3%13415.6%_exp$fenv_access_off10912.7%70.0%27632.2%scythe::dnorm10312.0%82.0%10312.0%_log$fenv_access_off586.8%88.8%586.8%scythe::

c++ - std::shared_ptr::owner_before 和 std::owner_less: "owner-based order"到底是什么意思?

我发现了一些关于此的讨论,但似乎没有任何内容明确说明“基于所有者的订单”到底是什么。它是否有效评估关于拥有的指针内存地址的值? 最佳答案 它定义了一个任意严格的弱排序,在该排序下,两个指针当且仅当它们共享所有权或均为空时才等效。等价以通常的方式定义:boolequivalent(p1,p2){return!p1.owner_before(p2)&&!p2.owner_before(p1);}这并不一定意味着它们指向同一个对象。两个指针可以指向不同的对象但仍然共享所有权:structthing{intn;};shared_ptrt1=

c++ - 预处理器和编译器之间的界限到底在哪里?

根据各种来源(例如,theSEradioepisodewithKevlinHenney,如果我没记错的话),“Cwithclasses”是使用预处理器技术实现的(输出然后被提供给C编译器),而C++一直是实现的使用编译器(早期刚好吐出C)。这似乎引起了一些困惑,所以我想知道:预处理器和编译器的界限到底在哪里?什么时候将实现某种语言的软件称为“预处理器”,什么时候将其称为“编译器”?顺便问一下,“编译语言”是一个既定的术语吗?如果是这样,它到底是什么意思? 最佳答案 这是一个有趣的问题。我不知道一个明确的答案,但如果被要求的话,我会这

c++ - #if 0 后面到底可以放什么?

根据C语言标准,#if0和#endif之间的行只需要包含预处理标记,因此大多数类型的格式完全错误的语法,例如#foo或#include[bar]是允许的(被忽略);GCC和MicrosoftC++确实默默地忽略了这一点。据我所知,@不对应于任何预处理标记,因此应该仍然是语法错误。GCC和MicrosoftC++默默地忽略它。这实际上是一种语言扩展还是我遗漏了什么?有没有人在实践中真正使用过将格式错误的语法放在#if0和#endif之间的能力? 最佳答案 C和C++标准在它们的语法中都包含一个特殊的“转义子句”,这使得每个非空白字符都

c++ - 当我们使用 mpi_send/receive 函数时到底发生了什么?

当我们使用mpi_send/receive函数时会发生什么?我的意思是这种通信是通过我们希望发送和接收的变量的值或地址完成的(例如进程0想要发送变量“a”到进程1。进程0究竟发送变量“a”的值或地址的“一个”)。当我们使用派生数据类型进行通信时会发生什么? 最佳答案 幕后发生了相当多的魔法。首先是意外消息队列。当发送方在接收方调用MPI_Recv之前调用MPI_Send时,MPI不知道消息将发送到接收方内存中的哪个位置。此时可能会发生两件事。如果消息很短,它会被复制到接收方的临时缓冲区中。当接收方调用MPI_Recv时,它首先检查匹

c++ - C++中的引用计数到底是什么意思?,

到底什么是引用计数?特别是,它对C++有什么用?如果我们不处理它们,我们会面临什么问题?是否所有语言都需要引用计数? 最佳答案 到底什么是引用计数?特别是C++有什么用?简单来说,引用计数就是对一个对象的引用进行计数。通常,C++采用RAII的技术。其中,管理类型对象释放的能力与类型对象本身相关联。这意味着用户不必显式管理对象的生命周期及其释放,执行此管理的功能内置于对象本身。此功能意味着对象应该存在并保持有效,直到有利益相关者引用该对象,这是通过引用计数实现的。每次共享(复制)对象时,引用计数(通常是类类型中的成员)都会递增,每次

c++ - 在 vector 中使用没有拷贝且没有 noexcept move 构造函数的对象。到底是什么坏了,我该如何确认?

我检查了很多moveconstructor/vector/noexcept线程,但我仍然不确定当事情应该出错时实际发生了什么。我无法按预期产生错误,所以要么我的小测试有误,要么我对问题的理解有误。我正在使用BufferTrio对象的vector,它定义了一个noexcept(false)move构造函数,并删除了所有其他构造函数/赋值运算符,这样就没有什么可以回退到:BufferTrio(constBufferTrio&)=delete;BufferTrio&operator=(constBufferTrio&)=delete;BufferTrio&operator=(BufferTr

c++ - 命名空间到底是什么,为什么有必要

我现在正在学习C++,在每个项目的开始,我的导师都会写一行:usingnamespacestd;据我所知,它使您不必调用header中包含的header名称中的函数,例如iostream::stdout,而只需调用stdout。但这行代码究竟告诉C++做什么。什么是命名空间,什么是标准?除了python之外,我也是编程的新手,所以切换到新范式对我来说非常困惑。 最佳答案 来自cppreference.com:Namespacesprovideamethodforpreventingnameconflictsinlargeprojec

c++ - 为什么 "long int"与 "int"大小相同?这个修改器到底有没有用?

嗯..我有点'虽然像long/short这样的修饰符扩展/减少了创建变量时分配的内存量,但是......#include#definetest_intint#definelong_intlongint#definelong_long_intlonglongintvoidmain(){printf("%i\n",sizeof(test_int));//output4printf("%i\n",sizeof(long_int));//output4.Why?wasn'tImodifiedit'ssize?printf("%i\n",sizeof(long_long_int));//outp