草庐IT

c++ - C++ 中类成员上的类和 std::async

我正在尝试编写一个类成员,它可以并行多次调用另一个类成员。我写了一个简单的问题示例,甚至无法编译它。我在调用std::async时做错了什么?我想问题在于我如何传递函数。#include#includeusingnamespacestd;classA{inta,b;public:A(inti=1,intj=2){a=i;b=j;}std::pairdo_rand_stf(intx,inty){std::pairret(x+a,y+b);returnret;}voidrun(){std::vector>>ran;for(inti=0;ittt=ran[i].get();cout编译:g+

c++ - switch 语句条件下同时具有模板和非模板转换运算符的类

问题最初出现在thisquestion.考虑以下代码:classVar{public:operatorint()const{return0;}templateoperatorT()const{returnT();}};intmain(){Varv;switch(v){}}没有操作符int()const{return0;},g++和clangreject代码。但是,上面的代码,带有operatorint(),是accepted通过铿锵但rejected通过g++出现以下错误:main.cpp:17:14:error:defaulttypeconversioncan'tdeducetemp

java - 默认情况下,Java 和 C++ 中的类是私有(private)的还是公有的?

Java和C++中的类默认是私有(private)的还是公有的? 最佳答案 Java:默认情况下,类的可见性是包私有(private)的,即仅对同一包中的类可见。C++:该类没有像Java中那样定义的可见性。如果您将它们包含在编译单元中,它们是可见的。 关于java-默认情况下,Java和C++中的类是私有(private)的还是公有的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - C++ 中只有静态方法的类的优点

即使有nostaticclassesinC++,来自Java背景,我用它来创建一个像Util这样只包含静态方法的辅助类。这被认为是不好的风格还是通常的做法?我看到的一种替代方法是使用C函数(根本没有类上下文)。还有哪些其他选择?有什么优点和缺点,在什么情况下我会使用这些。definingbunchofstaticmethodsinc++建议将命名空间静态函数作为一种选择,尽管我看不到没有类上下文的static关键字有什么影响。 最佳答案 如果你想在不破坏全局命名空间的情况下创建一组实用函数,你应该在它们自己的命名空间中创建常规函数:

c++ - 数字类型的类模板

如何编写只接受数字类型(int、double、float等)作为模板的类模板? 最佳答案 您可以使用std::is_arithmetic类型特征。如果您只想启用具有此类类型的类的实例化,请将其与std::enable_if结合使用。:#includetemplate::value,T>::type>structS{};intmain(){Ss;//compilesSs;//doesn'tcompile}对于更易于使用的enable_if版本,以及免费添加的disable_if,我强烈推荐阅读thiswonderfularticle关

具有非静态成员初始化器的类的 C++11 聚合初始化

标准是否允许:structA{inta=3;intb=3;};Aa{0,1};//???这个类仍然是聚合的吗?clang接受此代码,但gcc不接受。 最佳答案 在C++11中,具有类内成员初始值设定项使结构/类不是聚合-然而,这在C++14中已更改。这是我第一次遇到它时感到惊讶的事情,这种限制的基本原理是类内初始化器与用户定义的构造器非常相似,但相反的论点是没有人真正期望添加类内初始化器应该使他们的类/结构是非聚合的,我肯定没有。来自draftC++11standard8.5.1聚合部分(强调我的future):Anaggregat

c++ - 为什么我必须在 C++ 中的类声明末尾加上分号?

在C++类声明中:classThing{...};为什么我必须包含分号? 最佳答案 完整的语法本质上是类名{成分}实例;其中“constituents”是类元素和方法的序列,“instances”是类实例(即对象)的逗号分隔列表。例子:classFOO{intbar;intbaz;}waldo;同时声明FOO类和一个对象waldo。实例序列可能为空,在这种情况下,您只需classFOO{intbar;intbaz;};你必须把分号放在那里,这样编译器才会知道你是否声明了任何实例。这是一个与C兼容的东西。

c++ - 与正在定义的类相同类型的静态 constexpr 成员

我希望C类有一个C类型的静态constexpr成员。这在C++11中可行吗?尝试1:structFoo{constexprFoo(){}staticconstexprFoof=Foo();};constexprFooFoo::f;g++4.7.0说:“不完整类型的无效使用”指的是Foo()调用。尝试2:structFoo{constexprFoo(){}staticconstexprFoof;};constexprFooFoo::f=Foo();现在的问题是在类定义中缺少constexpr成员f的初始化程序。尝试3:structFoo{constexprFoo(){}staticcon

c++ - "enum class"是 C++ 中的类类型吗?

我在C++中使用cppreference阅读了有关枚举声明的内容。.然后我制作了枚举类并使用std::is_class检查它是否是类类型。#includeenumclassEnum{red=1,blue,green};intmain(){std::cout::value然后我在Linux平台的G++编译器中编译运行,它打印出false值。那么enum是否是类类型?如果enum是类类型,那为什么我会得到false值?p> 最佳答案 enumclass不是class定义-关键字的组合用于定义一个scopedenumeration,它是一

c++ - 实例化后是否可以更改 C++ 对象的类?

我有一堆类,它们都从一个公共(public)基类继承了相同的属性。基类实现了一些在一般情况下工作的虚函数,而每个子类为各种特殊情况重新实现了这些虚函数。情况如下:我希望这些子类对象的特殊性是可消耗的。本质上,我想实现一个expend()函数,它会导致对象失去其子类身份并恢复为基类实例,并在基类中实现一般情况行为.我应该注意派生类不会引入任何额外的变量,因此基类和派生类在内存中的大小应该相同。我愿意销毁旧对象并创建一个新对象,只要我可以在相同的内存地址创建新对象,这样现有的指针就不会被破坏。以下尝试不起作用,并产生一些看似意外的行为。我在这里错过了什么?#includeclassBase