c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
例: int main(int argc, char**) { constexpr int a = argc * 0; (void)a; constexpr int b = argc - argc; (void)b; return 0; } argc不是常量表达式,但在两种情况下,编译器仍然能够在编译时(即0)计算a和b的结果. g++接受上面的代码,而cl
我有几个模板类Impl(带有一些抽象方法),它们部分在CPP文件中实现,因此我需要显式实例化我的模板以供链接器找到它,如下所示: template class Impl<T0>; template class Impl<T1>; template class Impl<T2>; ... template class Impl<Tx>; 随着Tx类型数量的增长,我想找到一种比在所有必需文件中手动扩展
关于std :: shared_mutex和获取unique_lock的问题. 假设有3个主题: > 2个读者(尝试lock_shared()std :: shared_mutex),和 > 1作者(试图锁定[_unique]()std :: shared_mutex) 试图锁定[_unique]()的作者是否可能会被饿死?例如:在任何时候至少有一个读者拥有std :: shared_lock,而
参见英文答案 > std::function vs template                                    7个 我有一个名为Graph的C类,它有一个算法方法for_each_node().我可以把它变成一个模板,像这样: template <class UnaryFunction> UnaryFunction Graph::for_each_node (Unar
//fills my vector with pointers. //(some are pointing places, others are set to nullptr vector<Tree_NodeT*> xml_trees {Build_Tree_List(program_options->Get_Files())}; //time to print them for (auto
如何将默认函数指定为类成员的参数? 从我的代码派生的当前示例是: #include <iostream> #include <functional> template<typename T> struct C { static T test(std::function<T(int)> f = [](int i){return i;}) {return f(42);} }; in
我从事图形应用程序,并一直在使用共享和唯一的指针本质上是因为它为我处理内存释放(也称为方便),这可能是坏的(如果这就是我使用它们的原因). 我最近读到了关于Stackoverflow问题的答案,提到根据B. Stroustrup,通常不应该使用唯一/共享ptrs,而且应该通过值传递参数. 我有一个图形的情况,我认为使用shared_ptr是有道理的,但我想知道专家(我不是C专家),如果我过度做/思
我成功地传递了一个函数作为参数. // this is in a scope of a normal function class DummyClass{ public: static int dummyFunction(G& goo){ return goo.doSomething (); //non-static function //Edit 3: i
在C 11中是否存在std :: front和std :: back不存在的原因? 有std :: begin和std :: end所以对我来说,具有与实际实例相同的意义是有意义的. std :: begin()和std :: end()应该适用于所有基本容器(包括C风格的数组). 实际上,如果容器支持成员begin()和end()函数,则std :: begin()和std :: end()将调
C 11标准指定了类型特征std :: alignment_of< T>.它只返回alignof(T)的值. sizeof运算符是否有类似的特征?我只是错过了它,或者它只是在标准中错过了,还是有一些模糊的技术原因为什么没有指定? 显然创建这样的特性是微不足道的,但我无法想象在引入std :: alignment_of时不会考虑它. 对于上下文,我有一个自定义类型特征,用于在应用于类型列表时获取单个
为什么可变参数模板包中不允许特定类型? template< typename T > class Foo { public: template< typename... Values > void bar( Values... values ) { } template< T... values > <-- syntax error
我正在使用C fstream来读取配置文件. #include <fstream> std::ifstream my_file(my_filename); 现在,如果我传递一个目录的路径,它会默默地忽略它.例如.即使my_filename是目录,my_file.good()也会返回true.由于这是我的程序的意外输入,我喜欢检查它,并抛出异常. 如何检查刚刚打开的fstream是常规文件,目录还是
我有一个模板功能: namespace Example { template<class T> T Foo() { return T(0); }; } 我想使用using语句或类似的东西,这样我就不必在调用函数名时用它的名字命名前缀,即 template<class T> using Foo = Example::Foo<T>; 但是这不起作用. 我不想使用以下方法,因为它将包括命名空间的所有内容
我有一个类似容器的C类:它有size()和operator []成员函数.存储在容器中的值是std :: tuple对象.但是,容器实际上并没有将元组保存在内存中;相反,它根据以不同形式存储的基础数据按需构建它们. std::tuple<int, int, int> MyContainer::operator[](std::size_t n) const { // Example: dra
我已经阅读了一些关于SFINAE的文章,但找不到我的案例的解决方案.这就是我想要做的: #include <type_traits> struct CByteArray {}; struct HLVariant { HLVariant() {} HLVariant(const HLVariant&) {} HLVariant(const CByteArray&) {}
我希望在以下结构中有一个命名联合,这样我就可以在不知道哪个字段是“活动”的情况下记忆它. struct Literal { enum class Type : size_t { INT = 1, LONG, FLOAT, DOUBLE } type; union { int li; long ll; float lf;
我正在研究一种主要使用C作为其核心组件的产品.虽然它使用Visual C作为 Windows平台的主要编译器,并将其编辑器和调试器作为主要开发环境,但未使用任何Microsoft特定技术.对于其他平台,它使用gcc进行编译. 我的代码库大量使用模拟的右值引用(使用Boost移动库),可变参数模板(使用Boost处理器),在某些情况下使用表达式模板. 我很想切换到C 11,以获得更清晰的代码库,使用
这仅适用于C 11: 如果我有如下常规枚举: enum TestType { Test0 = 0, Test1, Test2, Test3, Test4, Test5, Test6, Test7 } 和这样的打包结构: struct { TestType a : 3 uint32_t b : 5 } TestStruct; TestStruct.a在访问时是否保证等于任何有效的指定枚举值?或者编译
我意识到“你不能移动const对象”的常识并不完全正确.如果你宣布移动ctor为,你可以 X(const X&&); 完整示例如下: #include <iostream> struct X { X() = default; X(const X&&) {std::cout << "const move\n";} }; int main() { const X x{};
在修改一个闭源游戏时,我正在运行时将机器代码修改为jmp到我自己的代码中.为了以通用方式执行此操作,我使用模式匹配来查找我想要修改的代码位置. (模式只包含字符/字节和字母可以变化的通配符.)通过从我的所有模式构建确定性有限自动机,我可以在线性时间内搜索. 但是我发现构建DFA比实际运行它需要更多的时间,特别是在调试版本中(我在开发过程中肯定需要),并且随着我添加更多模式,这种情况会变得更糟.但这