草庐IT

c++ - 数组与 std::initializer_list 作为函数参数

我可以通过两种方式编写一个将临时数组(例如{1,2,3})作为参数的函数://usingarraytemplateautofoo1(constT(&t)[N])->void;//usingstd::initializer_listtemplateautofoo2(std::initializer_listt)->void;是否有任何指南可以告诉您哪个更好? 最佳答案 它们是完全不同的东西。还有2或3个其他选择是合理的。templatevoidfoo_a(std::arrayconst&);templatevoidfoo_b(gsl:

c++ - 成员变量的类模板实参推导

在C++17中,由于类模板参数推导,我可以在下面的示例中使用Foo而无需空模板参数括号:templatestructFoo{};intmain(){Foof;//beforeC++17youhadtowrite"Foof;"}为什么我不允许对类成员使用相同的语法?templatestructFoo{};structFoo2{Foof{};/// 最佳答案 没有人,IIRC,提出过。大概出于同样的原因,我们没有从默认成员初始化器中推断出任何东西:它们并不总是被使用——构造函数可以通过显式指定不同的初始化器来覆盖它们。

c++ - SFINAE 检测类型是否被定义

我想在定义特定类型时选择模板的特化。我仍然不能全神贯注于SFINAE:(。我可能很接近,也可能完全偏离。我尝试了不同的东西,这是一些东西,我至少希望理解为什么它不起作用(is_complete基本上是从here偷来的):#include#includetemplatestructis_complete:std::false_type{};templatestructis_complete:std::true_type{};//thisshouldbecallediffooisnotdefinedvoidtest(){std::coutstd::enable_if::value,void

c++ - 如何确保在 C++ 中覆盖(隐藏)派生类中的方法?

classBase{public:voidfoo()const{std::cout我想确保foo()const为Base正确隐藏。是的,这是个坏主意,也许我应该将Base::foo()const设为纯虚拟,以要求Dervied::foo()正确覆盖——但假设我无法将Base::foo()设为纯const虚拟的。有没有更好的方法来确保Base::foo()const正确隐藏在Derived中?编辑:我想确保在Derived中我已经正确地隐藏了基础实现。 最佳答案 只需在派生类中定义一个成员函数foo,您就隐藏了基类中的所有foo函数。

c++ - 关于 C 中的 C++ 类访问/操作

几周来我一直在阅读有关StackOverflow的问题...这将是我的第一个问题。最近我研究了如何让C访问/操作C++类。我知道在正常情况下,理想情况下不应分别用C和C++编译组件,但目前这不是一种选择。我查看了3个关于能够在C中移植/使用C++的教程。它们是:DevX上的“C++和C互操作性指南”“在同一程序中混合C和C++代码”一文Sun'ssite.[32]如何混合使用C和C++”,发表于Parashift首先,我已经知道的:你必须使用extern"C"来避免C++函数名称修饰。您需要与C语言兼容的回调原型(prototype)。G++必须将C++编译成.o文件,GCC将特定于C

c++ - CRTP与 "derived"中函数的直接实现

我正在尝试更好地了解CRTP。到目前为止,我的理解是它允许编写如下函数。templatevoidfoo(Basex){x.do_stuff()}现在,根据传递给函数foo()的实际编译时派生对象x,它会做不同的事情。但是,我可以从Base派生类Derived并使用非虚拟但覆盖的方法屏蔽/隐藏它的do_stuff()Derived::do_stuff。那么什么时候使用CRTP才是正确的,而不是最简单的重要示例,它显示了CRTP相对于阴影/掩码的优势。 最佳答案 CRTP的重点是能够在没有虚拟性的情况下获得派生对象的类型。如果你这样做s

c++ - 变量初始化(指针和值)

Foof1=Foo();//(1)OkFoof2=Foo;//(2)CompilererrorFoo*p1=newFoo();//(3)OkFoo*p2=newFoo;//(4)Ok.Why??我想知道为什么有两种初始化指针的方法。看起来有点不协调。是否有一些合乎逻辑的原因,如果有,是什么?或者,也许这是某种遗产?如果是这样,这种表示法的起源是什么? 最佳答案 至少可以说,这有点……复杂。在处理对象时,这两种表示法是等价的。在处理基本类型(如int)时,(3)会初始化(零填充)值,而(4)不会(该值将保留为未定义)。对于自动分配的对

c++ - 在 C++11 中正确编写源函数

我的头很痛:我读了很多关于C++11x的移动语义的博客,以至于我的大脑变得糊涂了,所以请有人给我一个关于如何使以下代码高效工作的简短但有趣的指南吗?给定一个类Foo,我希望能够编写返回不同状态的Foo对象的函数(有时称为源函数),并尽可能高效地执行此操作。classFoo{//Somemethodsandmembers};FoogetFirstFoo(){Foofoo;//Dosomethingstofooreturnfoo;}FoogetSecondFoo(){Foofoo;//Dosomedifferentthingstofooreturnfoo;}intmain(){Foof=g

c++ - 为什么 Foo::inner Constexpr 不会链接,而 User Literal{Foo::inner Constexpr} 会链接?

考虑以下简单类,这些类是我根据在实际项目中遇到的问题设计的。Triple是一种与内部一起使用的快速样板类型constexprFoo类中的s:#includeclassTriple{public:friendstd::ostream&operator如果我再写一个main()使用公共(public)内部函数constexpr来自Foo,如下,会链接失败(使用g++4.7.0,在Windows7上通过mingw-x86-64):intmain(intargc,char**argv){usingstd::cout;usingstd::endl;cout$g++-otest-O3--std=c

c++ - 具有 C++ 重载函数的 SWIG 类型映射

我有一个这样的函数定义:voidFoo(intszData,intData[]);我有一个像这样的SWIG类型映射:%typemap(in)(intszData,intData[]){inti;if(!PyTuple_Check($input)){PyErr_SetString(PyExc_TypeError,"Expectingatupleforthisparameter");$1=0;}else$1=PyTuple_Size($input);$2=(int*)malloc(($1+1)*sizeof(int));for(i=0;i类型映射允许我像这样从Python调用Foo():富