草庐IT

c++ - 函数模板显式特化 C++

我的书提到了两种显式特化的方法:templatevoidSwap(int&,int&);templatevoidSwap(int&,int&);两者有什么区别?什么时候用一个,什么时候用另一个?函数名后面的到底是什么? 最佳答案 whatisthedifferencebetweenboth?没有区别。在第二种情况下,您让编译器从特化的签名中执行类型推导。因此,两种形式都声明了Swap()的特化。对于T=int.whentouseoneandwhentousetheother?由您自行决定,当一种形式或另一种形式满足您在可读性或易于维

c++ - 类模板的成员模板的成员模板的显式模板函数特化是否有效?

有谁知道这个显式特化是否有效:templatestructL{templatestructO{templatestaticvoidFun(U);};};templatetemplatetemplatevoidL::O::Fun(U){}clangtrunk(12/3/2013)给出以下错误:f:...\test.cpp:36:20:错误:类'O'中'Fun'的越界定义没有定义voidL::O::Fun(U){}~~~~~~~~~~~~~~^产生了1个错误。我们将不胜感激标准中的任何支持性引用以证明您的回答是正确的!注意:我有点惊讶这是一个错误-我希望为任何以.开始实例化“Fun”的模板

c++ - 显式特化已删除的主模板

GCC接受这个但Clang拒绝它作为重新定义:templatevoids()=delete;templatevoids(){}谁是对的? 最佳答案 这是一个Clangbug还有CWGDR941,它已经被C++11采用。Clang不合格。 关于c++-显式特化已删除的主模板,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22369852/

c++ - 如何确定函数参数是自动设置为默认值还是在 C++ 中显式设置?

我很确定这是不可能的,但如果以某种方式存在(可能通过编译器提供的宏),它对我来说将非常有用,所以我将它发布在这里。假设我有一个函数:voidfunc(intparam1,boolparam2=false){...}param2在这里被赋予了默认值。是否有任何机制可以确定param2是否明确设置为其默认值false还是自动传递?换句话说,从函数func中,是否可以区分以下两个调用?我正在使用MicrosoftVisualC++编译器。func(1,false);和func(1); 最佳答案 你无法区分你问的方式,但你可以这样做:voi

c++ - NvAPI NVAPI_INTERFACE 缺少显式类型

我是c++/cli的新手,想为nvapi编写一个小的托管包装器。现在尝试访问某些函数时(例如NvAPI_Initialize)VisualStudio告诉我这个函数没有定义:#include"nvapi.h";NvAPIStatusNv_GPU_ThermalAPI::M_NvAPI_GPU_GetThermalSettings(System::UIntPtrgpuHandle,Nv_Thermal_TargetsensorIndex,[Out]array^%settings){NvAPI_Statusres=NvAPI_Status::NVAPI_OK;//OKNvPhysicalG

C++ 隐式和显式继承构造函数调用

我有一个关于对基本构造函数的隐式和显式调用的问题。如果我们有这样的类层次结构:classPerson{protected:std::stringm_name;public:Person(std::string&_name):m_name(_name){std::cout根据我的讲义,主要是对'Baby'的调用,如下所示:std::stringbabyname="Robert";intnappies=5;Babybaby(babyname,nappies);导致以下情况发生:当在Baby的初始化列表中对Person进行显式调用时:Baby的初始化列表被调用,no_of_nappies被初

c++ - 如何通过使其中一个必须是显式的来解决对模糊构造函数的调用?

在下面的代码中,我构造了一个Node的实例。通过传递Point的实例.例如Node{{0,1}};然而,调用Node的构造函数不明确。我猜是{0,1}也可以理解为两个intchar的表示,和{char,char}也适用于std::string的构造函数,形式为std::initializer_list.我想保留构造Node的能力方便地作为Node{{0,1}}同时还保留来自std::string的转换至Node,最好是Node{std::string{"0,1"}}的形式或类似的东西。有没有一种方法可以仅当我指定它时才调用采用字符串的构造函数?或者简单地禁用std::stringstd

显式类型转换(C 风格转换)的 C++ 转换符号和 static_cast 的多种解释

Paragraph4of[expr.cast](在撰写本文时可用的最新C++标准草案中)描述了C样式转换的行为如下:Theconversionsperformedbyaconst_­cast,astatic_­cast,astatic_­castfollowedbyaconst_­cast,areinterpret_­cast,orareinterpret_­castfollowedbyaconst_­cast,canbeperformedusingthecastnotationofexplicittypeconversion.Thesamesemanticrestrictionsan

c++ - 在 C++ 中显式转换为 native 类型

我正在尝试为不支持longlong的编译器编写一个实现64位整数的类,以便在现有代码中使用。基本上,我应该能够在某个地方有一个typedef来选择我是想使用longlong还是我的类,其他一切都应该编译和工作。因此,我显然需要从int、long等转换构造函数,以及到这些类型的相应转换运算符(强制转换)。这似乎会导致算术运算符出错。对于native类型,编译器“知道”当operator*(int,char)被调用时,它应该将char提升为int并且调用operator*(int,int)(而不是将int转换为char,例如)。在我的例子中,它混淆了各种内置运算符和我创建的运算符。在我看来

没有显式指针的 C++ 多态调用

如果我有基类:structBase{voidfoo(){bar();}virtualvoidbar(){}};和派生类:structDerived:publicBase{voidbar(){cerr写这段代码的时候会发生:Derivedd;d.foo();我将看到打印“Derivedhere”——因为调用了Derived::bar。但是我没有通过指向基的指针调用,而是在这里工作的多态性。为什么?是不是因为Base::foo中对bar的调用实际上隐式调用了this->bar()和bar在类的vtable中查找? 最佳答案 您的猜测完全