草庐IT

Type_Ary

全部标签

C++ 函数模板 : Derived and explicit return type

我有以下问题,我只是没有找到合适的解决方案(也许没有):我有一个模板化方法,其中返回类型取决于输入类型,感谢C++11decltype返回类型可以很容易地导出,但是如果需要,我还希望允许用户明确定义返回类型。更正式地说,我有一个模板化函数f,我想被调用为f(x),既没有显式定义输入类型,也没有显式定义返回类型。我也希望能够将其称为fx()明确定义返回类型,但输入类型仍然自动派生。现在,用C++11满足第一个约束很容易(假设还有另一个模板化方法:templateautof(constInT&in)->decltype(/*codederivingthereturntypeusingin*

c++ - type、value_type 和 element_type 之间有什么区别,何时使用它们?

我已经编写了一个模板类,它应该公开其模板参数,但我不确定合适的命名。我已经为本质上相同的东西找到了三个不同的名称(据我所知):容器,例如std::vector使用value_type智能指针,例如std::unique_ptr使用element_typestd::reference_wrapper仅使用type这些不同名称背后的想法是什么?哪些标准算法或特征类取决于哪个名称?我应该为我的类使用哪个名称(介于智能指针和引用包装器之间的名称)? 最佳答案 value_type是容器(以及迭代器等)的成员类型。它提供对象的类型,通常是一个

c++ - typeid 何时可以为同一类型返回不同的 type_info 实例?

AndreiAlexandrescu写入ModernC++Design:Theobjectsreturnedbytypeidhavestaticstorage,soyoudon'thavetoworryaboutlifetimeissues.安德烈继续说道:Thestandarddoesnotguaranteethateachinvocationof,say,typeid(int)returnsareferencetothesametype_infoobject.尽管标准不保证这一点,但在GCC和VisualStudio等常见编译器中如何实现这一点?假设typeid没有泄漏(并且每次调

c++ - "temporary of type ' A ' has protected destructor", 但它的类型是 B

在以下代码中,使用Clang8.0.0+和-std=c++17编译,使用B{}创建派生类实例会报错错误:'A'类型的临时对象具有protected析构函数。当临时文件的类型为B(因此应该有一个公共(public)析构函数)时,为什么A会出现在此消息中?https://godbolt.org/z/uOzwYaclassA{protected:A()=default;~A()=default;};classB:publicA{//canalsoomitthese3lineswiththesameresultpublic:B()=default;~B()=default;};voidfoo(

c++ - 什么时候将 node_type 与 std::map::insert 一起使用?

我已经习惯了std::map的现有接口(interface)。插入元素返回一个描述插入成功的bool值,以及关于插入元素所在位置的迭代器。templatestd::pairinsert(P&&value);//(sinceC++11)C++17添加了类似的调用,但类型名称不同:insert_return_typeinsert(node_type&&nh);//(sinceC++17)我试着查找什么是node_type,但它主要是未指定的:templateclass/*unspecified*/为什么要在C++17中添加此函数,我什么时候可以在旧调用上使用它?

c++ - 无法编译任何 C++ 程序;错误 : unknown type name 'uint8_t'

EDIT2:问题是不是简单的打印错误。我在下面的日志中打错了字,我更正了,但问题仍然存在。编辑:在下面尝试之后,我错误地使用gcc而不是g++运行了一次。问题在g++之前就存在,现在也存在。我目前使用的是MacOSHighSierra机器。我最近将很多文件从MacBookAir移到了这台机器上,包括我认为都是Xcode的垃圾。现在,当我尝试编译一个非常简单的C++程序时:#includeintmain(){//VAR_DECinta=4;//VAR_MANIPa=a*2;//VAR_PRINTstd::cout我收到以下荒谬的错误:jrfarah@Josephs-MBP:[config

c++ - 转换为 Type&& 运算符的类型

我很惊讶地看到以下编译:structC{operatorC&&(){std::cerr一种带有运算符的类型,用于其自身的右值引用转换。但是,我无法使用我认为可能会做的事情来调用运算符(operator)。将值传递给采用右值引用的函数失败,并且在对象上调用std::move不会触发任何内容。为什么这段代码能够编译,有什么方法可以让这个函数运行?clang给出警告:无论是否引用类型,都永远不会使用将“C”转换为自身的转换函数。 最佳答案 structC{operatorC(){}};也是允许的,并给出相同的警告。在§12.3.2/1中提

c++ - const_cast<const Type*> 有用吗?

最近我发现一段C++代码可以有效地执行以下操作:char*pointer=...;constchar*constPointer=const_cast(pointer);显然作者认为const_cast表示“添加常量”,但实际上const也可以隐式添加:constchar*constPointer=pointer;在任何情况下我真的必须const_cast到一个指向常量的指针(const_cast,如上例)? 最佳答案 你有2个重载并且你想强制执行const一个。当您根据另一个来调用一个时,通常就是这种情况。classA{public

c++ - 编译器错误 "character constant too long for its type"。怎么了?

我有一些我正在尝试处理的代码...#include#includeintmain(){std::cout";std::stringchoice;std::getline(cin,choice);if(choice=='hamburger'||choice=='Hamburger'){std::cout";std::stringopt;std::getline(cin,opt);if(opt=='y'||opt=='Y'||opt=='yes'||opt='Yes'){std::cout这是改编self编写的Bash脚本,是我的第一个C++程序之一。当我编译它时,它出现了这些错误...t

c++ - Qt错误: invalid use of incomplete type 'class QLabel'

我正在尝试使用QtCreater编译以下程序,但我在该程序中遇到了很多错误。我从一本书中得到了这个程序,但我无法找出错误所在。谁能帮忙调试这个程序。这是FindDialog.h#ifndefFINDDIALOG_H#defineFINDDIALOG_H#includeclassQCheckbox;classQLabel;classQLineEdit;classQPushButton;classFindDialog:publicQDialog{Q_OBJECTpublic:FindDialog(QWidget*parent=0);signals:voidfindNext(constQSt