草庐IT

派生词

全部标签

c++ - 从派生**转换为基础**

我正在阅读this不幸的是,无法深入理解为什么编译器不允许从Derived**转换为Base**。我也看过this它只提供了parashift.com链接的更多信息。编辑:让我们逐行分析这段代码:Carcar;Car*carPtr=&car;Car**carPtrPtr=&carPtr;//MyComment:Untilnowthereisnoproblem!Vehicle**vehiclePtrPtr=carPtrPtr;//ThisisanerrorinC++//MyComment:Herecompilergivesmeanerror!AndItrytounderstandwhy.

c++ - 使用派生类的静态 constexpr 数据成员初始化基类的静态 constexpr 数据成员

考虑以下代码:templatestructS{staticconstexprintbar=T::foo;};structU:S{staticconstexprintfoo=42;};intmain(){}GCCv6.1编译它,clang3.8以错误拒绝它:2:error:nomembernamed'foo'in'U'structS{staticconstexprintbar=T::foo;};哪个编译器是正确的?难道是因为Uisnotacompletetype在我们尝试在S中使用它的地方?在这种情况下,它应该被认为是GCC的错误,但我想知道我是否适合在错误跟踪器上搜索/打开问题...编

c++ - 使用派生类的静态 constexpr 数据成员初始化基类的静态 constexpr 数据成员

考虑以下代码:templatestructS{staticconstexprintbar=T::foo;};structU:S{staticconstexprintfoo=42;};intmain(){}GCCv6.1编译它,clang3.8以错误拒绝它:2:error:nomembernamed'foo'in'U'structS{staticconstexprintbar=T::foo;};哪个编译器是正确的?难道是因为Uisnotacompletetype在我们尝试在S中使用它的地方?在这种情况下,它应该被认为是GCC的错误,但我想知道我是否适合在错误跟踪器上搜索/打开问题...编

c++ - 是否在非数组指针的末尾创建一个指针,该指针不是从 C++17 中的一元运算符和未定义行为派生的?

C++17标准似乎说,如果指针指向数组元素,则整数只能添加到指针,或者,作为特殊异常(exception),指针是一元运算符的结果&:8.5.6[expr.add]描述对指针的加法:Whenanexpressionthathasintegraltypeisaddedtoorsubtractedfromapointer,theresulthasthetypeofthepointeroperand.IftheexpressionPpointstoelementx[i]ofanarrayobjectxwithnelements,theexpressionsP+JandJ+P(whereJha

c++ - 是否在非数组指针的末尾创建一个指针,该指针不是从 C++17 中的一元运算符和未定义行为派生的?

C++17标准似乎说,如果指针指向数组元素,则整数只能添加到指针,或者,作为特殊异常(exception),指针是一元运算符的结果&:8.5.6[expr.add]描述对指针的加法:Whenanexpressionthathasintegraltypeisaddedtoorsubtractedfromapointer,theresulthasthetypeofthepointeroperand.IftheexpressionPpointstoelementx[i]ofanarrayobjectxwithnelements,theexpressionsP+JandJ+P(whereJha

c++ - 派生类的类模板参数推导失败

#includetemplatestructmypair:std::pair{usingstd::pair::pair;};intmain(){(void)std::pair(2,3);//Itworks(void)mypair(2,3);//Itdoesn'twork}上面的格式是否正确?如果构造函数被继承,是否可以在第二种情况下推断出类模板参数?std::pair的构造函数是否参与了​​mypair的隐式推导指南的创建?我的编译器是g++7.2.0。 最佳答案 简短的故事:标准中没有规定这将如何工作,也没有任何规定说它不起作用。

c++ - 派生类的类模板参数推导失败

#includetemplatestructmypair:std::pair{usingstd::pair::pair;};intmain(){(void)std::pair(2,3);//Itworks(void)mypair(2,3);//Itdoesn'twork}上面的格式是否正确?如果构造函数被继承,是否可以在第二种情况下推断出类模板参数?std::pair的构造函数是否参与了​​mypair的隐式推导指南的创建?我的编译器是g++7.2.0。 最佳答案 简短的故事:标准中没有规定这将如何工作,也没有任何规定说它不起作用。

c++ - 在派生类初始化器列表中初始化模板基类成员类型

这里有一些代码概述了我一直在努力解决的问题。最后一个问题(目前就g++而言)是:执行Bar::Bar(...)构造函数例程时,“错误:'Foo-T'未在此范围内声明”。否则,我试图解决的问题是基于使用模板传递给派生类构造函数的参数设置基类成员类型之一。如果有一种方法可以简单地通过将参数传递给派生类构造函数来设置基类成员类型(TFoo-T),我更愿意这样做。到目前为止,我看不到同时使用模板参数和匹配的派生类构造函数参数来完成此任务的方法。您能在以下代码中发现我可以做得更好以实现相同目标的任何内容吗?我对通用编码和模板比较陌生。#includetypedefinta_arg_t;typed

c++ - 在派生类初始化器列表中初始化模板基类成员类型

这里有一些代码概述了我一直在努力解决的问题。最后一个问题(目前就g++而言)是:执行Bar::Bar(...)构造函数例程时,“错误:'Foo-T'未在此范围内声明”。否则,我试图解决的问题是基于使用模板传递给派生类构造函数的参数设置基类成员类型之一。如果有一种方法可以简单地通过将参数传递给派生类构造函数来设置基类成员类型(TFoo-T),我更愿意这样做。到目前为止,我看不到同时使用模板参数和匹配的派生类构造函数参数来完成此任务的方法。您能在以下代码中发现我可以做得更好以实现相同目标的任何内容吗?我对通用编码和模板比较陌生。#includetypedefinta_arg_t;typed

c++ - 为什么派生类不使用基类 operator=(赋值运算符)?

以下是实际问题的简化版本。与调用Base::operator=(int)不同,该代码似乎生成了一个临时Derived对象并改为复制该对象。为什么不使用基本赋值运算符,因为函数签名似乎完美匹配?这个简化的示例没有显示任何不良影响,但原始代码在析构函数中有一个副作用,会导致各种破坏。#includeusingnamespacestd;classBase{public:Base(){cout输出是:StartBase()Derived()Base(int)Derived(int)~Derived()~Base()Finish~Derived()~Base()http://ideone.com