草庐IT

静态成员函数中封闭类的 C++ 类型

我认为这是完全不可能的,但如果。是否有可能在任何版本的C++中以某种方式在静态成员函数中获取封闭类的类型?classImpossible{public:staticvoidFun(){typedefImpossibleEnclosingClass;//nowdosomethingwithEnclosingClass...}}有没有办法在函数中不写类名的情况下获取封闭类的类型(本例中为Impossible)?我之所以这样做是为了避免在函数中重复类名。如果发生这种情况,很容易导致难以找到复制粘贴错误:classSomeOther{//anotherclass,withthesameinte

c++ - 在 C++ 中编译时间类型确定

一位同事最近向我展示了他在网上找到的一些代码。它似乎允许编译时确定一个类型是否与另一种类型具有"is"关系。我认为这非常棒,但我不得不承认我对它的实际工作原理一无所知。谁能给我解释一下?templateinlineboolisRelated(constDerivedT&){DerivedTderived();chartest(constBaseT&);//sizeof(test())==sizeof(char)char(&test(...))[2];//sizeof(test())==sizeof(char[2])structconversion{enum{exists=(sizeof

c++ - 在 C++ 中编译时间类型确定

一位同事最近向我展示了他在网上找到的一些代码。它似乎允许编译时确定一个类型是否与另一种类型具有"is"关系。我认为这非常棒,但我不得不承认我对它的实际工作原理一无所知。谁能给我解释一下?templateinlineboolisRelated(constDerivedT&){DerivedTderived();chartest(constBaseT&);//sizeof(test())==sizeof(char)char(&test(...))[2];//sizeof(test())==sizeof(char[2])structconversion{enum{exists=(sizeof

c++ - 为什么顺序容器同时具有 size_type 和 difference_type?

vector两者都有vector::size_type和vector::difference_type.从size_type开始,两者似乎都没有必要存在。保证能够保存与vector的最大元素数一样大的值。可能包含在给定的系统上,并且在任何有效的用例中,difference_type必须小于或等于最大元素数,即顺序容器中两个元素之间的距离永远不会大于顺序容器可以包含的最大元素数。有人可以举个例子说明两者之间有什么区别吗? 最佳答案 container::difference_type存在是因为对于某些序列容器,您可以减去迭代器。该减法

c++ - 为什么顺序容器同时具有 size_type 和 difference_type?

vector两者都有vector::size_type和vector::difference_type.从size_type开始,两者似乎都没有必要存在。保证能够保存与vector的最大元素数一样大的值。可能包含在给定的系统上,并且在任何有效的用例中,difference_type必须小于或等于最大元素数,即顺序容器中两个元素之间的距离永远不会大于顺序容器可以包含的最大元素数。有人可以举个例子说明两者之间有什么区别吗? 最佳答案 container::difference_type存在是因为对于某些序列容器,您可以减去迭代器。该减法

C++: "vector<int>::size_type variable"- 以这种方式声明有什么意义?

我认为这是一个非常基本的问题,但我无法弄清楚。我习惯于在C++中使用数组,但我现在开始学习vector。我正在编写测试代码,遇到了一个问题。首先,这是我制作的代码:#include#include#includeusingnamespacestd;intmain(){vectorscore(10);for(vector::size_typei=0;i>score[i];}doubletotal=accumulate(score.begin(),score.end(),0);cout在for第9行中的句子,我声明i作为vector::size_type类型(因为有人告诉我这样做)。我用i

C++: "vector<int>::size_type variable"- 以这种方式声明有什么意义?

我认为这是一个非常基本的问题,但我无法弄清楚。我习惯于在C++中使用数组,但我现在开始学习vector。我正在编写测试代码,遇到了一个问题。首先,这是我制作的代码:#include#include#includeusingnamespacestd;intmain(){vectorscore(10);for(vector::size_typei=0;i>score[i];}doubletotal=accumulate(score.begin(),score.end(),0);cout在for第9行中的句子,我声明i作为vector::size_type类型(因为有人告诉我这样做)。我用i

c++ - C++ POD 类型不能有任何构造函数吗?

我有一个类和一个const变量。structA{intb;};Aconsta;A类是POD,可以这样初始化。Aconsta={3};恕我直言,拥有这样的构造函数看起来不错。structA{intb;A(intnewB):b(newB){}};但Clang假定A为非聚合类型。为什么我不能有这样的构造函数?还是我应该做点别的?我修改了问题以表达我原来的意思。我错误地将struct写为class,对于@Johannes的混淆感到抱歉:) 最佳答案 POD表示普通旧数据类型,根据定义不能有用户定义的构造函数。POD实际上是一个聚合类型(见下

c++ - C++ POD 类型不能有任何构造函数吗?

我有一个类和一个const变量。structA{intb;};Aconsta;A类是POD,可以这样初始化。Aconsta={3};恕我直言,拥有这样的构造函数看起来不错。structA{intb;A(intnewB):b(newB){}};但Clang假定A为非聚合类型。为什么我不能有这样的构造函数?还是我应该做点别的?我修改了问题以表达我原来的意思。我错误地将struct写为class,对于@Johannes的混淆感到抱歉:) 最佳答案 POD表示普通旧数据类型,根据定义不能有用户定义的构造函数。POD实际上是一个聚合类型(见下

c++ - 如果没有必要,是否应该使用无符号整数?

如果不需要额外的值范围,是否应该将变量声明为无符号整数?例如,在for循环中声明变量时,如果您知道它不会是负数,这有关系吗?一个比另一个快吗?像在C++中一样声明unsignedint是不是很糟糕?重申一下,是否应该这样做即使不需要额外的范围?我听说应该避免使用它们,因为它们会引起混淆(IIRC这就是Java没有它们的原因)。 最佳答案 使用uints的原因是它为编译器提供了更广泛的优化。例如,如果它知道x是正数,它可以用'x'替换'abs(x)'的实例。它还开辟了各种仅适用于正数的按位“强度减少”。如果您总是将一个int乘以/除以