Tag: c ++ 11

Unicode的例外是什么()

或者,“俄罗斯人如何抛出exception?” std :: exception的定义是: namespace std { class exception { public: exception() throw(); exception(const exception&) throw(); exception& operator=(const exception&) throw(); virtual ~exception() throw(); virtual const char* what() const throw(); }; } deviseexception层次结构的stream行学派是派生自std :: exception: 通常,最好是抛出对象,而不是内置的。 如果可能的话,你应该抛出从std :: exception类派生(最终)的类的实例。 通过让你的exception类inheritance(最终)从标准exception基类,你的生活使用户更容易(他们可以select通过std :: exception捕获大部分东西),再加上你可能提供更多的信息(比如你的特殊exception可能是std :: runtime_error或者其他的).std :: runtime_error或者其他)。 但是面对Unicode,devise一个实现以下两个方面的exception层次似乎是不可能的: 最终从std :: exception派生,以便在catch站点使用 提供Unicode兼容性,以便诊断不会被切片或乱码 用一个可以用Unicodestring构造的exception类就可以了。 但是标准规定what()必须返回一个const char *,所以在某些时候inputstring必须转换为ASCII。 无论是在构build时还是在调用what()时(如果源string使用不能用7位ASCII表示的字符),都可能无法在不失真的情况下格式化消息。 […]

这个C ++代码在技术上会发生什么?

我有一个B类,它包含一个A类的向量。 我想通过构造函数初始化这个向量。 A类输出一些debugging信息,所以我可以看到它的构造,破坏,复制或移动。 #include <vector> #include <iostream> using namespace std; class A { public: A() { cout << "A::A" << endl; } ~A() { cout << "A::~A" << endl; } A(const A& t) { cout <<"A::A(A&)" << endl; } A(A&& t) { cout << "A::A(A&&)" << endl; } }; class B { public: vector<A> va; […]

C ++中的“”是什么意思?

当我阅读Cocos2dx 3.0 API时,发现如下所示: auto listener = [this](Event* event){ auto keyboardEvent = static_cast<EventKeyboard*>(event); if (keyboardEvent->_isPressed) { if (onKeyPressed != nullptr) onKeyPressed(keyboardEvent->_keyCode, event); } else { if (onKeyReleased != nullptr) onKeyReleased(keyboardEvent->_keyCode, event); } }; 这是什么意思? 这是C++11新语法吗?

转换浮点值时设置std :: to_string的精度

在C ++ 11中,当给定一个float或doubletypes的input值时,std :: to_string默认为6个小数位。 推荐的或者最优雅的改变这种精度的方法是什么?

通过重复对象名称来调用静态方法

我有一个单身人士: struct foo { static foo& instance() { static foo f; return f; } }; 当重新安排一些代码时,我以“错误”结束了这个陈述: foo::foo::instance() 但是我的编译器(gcc 4.7)认为这是正确的。 实际上,甚至foo::foo::foo::instance()也会编译。 为什么?

C ++ 11:如何别名的function?

如果我在命名空间栏中有一个Foo类: namespace bar { class Foo { … } }; 那么我可以: using Baz = bar::Foo; 现在它就像我在名字空间中用Baz这个名字定义了这个类。 是否有可能做同样的function? namespace bar { void f(); } 接着: using g = bar::f; // error: 'f' in namespace 'bar' does not name a type 最干净的方法是什么? 解决scheme也应该适用于模板function。 定义:如果某个实体B是A的别名 ,比源代码中B的任何或所有用法(不是声明或当然定义)都被replace为B(被剥离)生成的代码保持不变。 例如typedef AB是一个别名。 #define BA是一个别名(至less)。 T& B = A不是别名,B可以有​​效地实现为间接指针,而“非混淆”A可以使用“即时语义”。

枚举与强types的枚举

我是C ++编程的初学者。 今天我遇到了一个新的话题:强typesenum 。 我已经研究了一下,但是直到现在我还是无法知道为什么我们需要这个,有什么用呢? 例如,如果我们有: enum xyz{a, b, c}; /*a = 0, b = 1, c = 2, (Typical C format)*/ 为什么我们需要写: enum class xyz{a, b, c}; 我们在这里做什么? 我最重要的疑问是如何使用它。 你能提供一个小例子,这会让我明白。

C ++ std :: tuple的销毁顺序

是否有一个规则说明了一个std ::元组的成员被销毁的顺序? 例如,如果Function1返回一个std::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>> ,那么我可以确定(当Function2的范围剩下时) ClassB的实例被引用由第二个成员在第一个成员所指的ClassA实例之前被销毁? std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1() { std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage; get<0>(garbage).reset( /* … */ ); get<1>(garbage).reset( /* … */ ); return garbage; } void Function2() { auto to_be_destroyed = Function1(); // … do something else // to_be_destroyed leaves scope // […]

在C ++中使用auto 11

当我使用auto来推断一个指针types时,我发现了一个奇怪的现象。 我的代码是这样的: #include <iostream> using namespace std; int main() { int i = 100; auto p1 = &i; auto *p2 = &i; cout << *p1 << " " << *p2 << endl; return 0; } 在编译和执行后,我们可以发现*p1和*p2的结果是一样的,均为100.这意味着p1和p2都是指向int对象的指针对象。 [user@host ~]$ ./test 100 100 这两个定义p1和p2语句是否有区别?

如何降低一个std :: shared_ptr?

考虑: struct SomethingThatsABase { virtual bool IsChildOne() const { return false; } virtual bool IsChildTwo() const { return false; } }; struct ChildOne : public SomethingThatsABase { virtual bool IsChildOne() const { return true; } }; struct ChildTwo : public SomethingThatsABase { virtual bool IsChildTwo() const { return true; } }; void SomeClientExpectingAChildOne(std::shared_ptr<ChildOne> const& ptrOne) […]