Tag: c ++ 11

所有对象typesT的sizeof(T)> = alignof(T)总是如此吗?

对于任何对象typesT , sizeof(T)总是至less与alignof(T)一样大? 直观地看起来如此,因为即使你调整对象的alignment方式,如: struct small { char c; }; 通常情况下,它们的“大小”也是向上调整的,以便数组中对象之间的关系在保持alignment的情况下是有意义的(至less在我的testing中,例如: struct alignas(16) small16 { char c; }; 具有16的大小和alignment。

如何build立与C ++ 0x支持的Boost?

我不知道如何用C ++ 0x编译器来构buildBoost。 必须给bjam哪个选项? 应该修改user.config文件吗?有人可以帮助我吗? 最好的,维森特

为什么在RAII可用时收集垃圾?

我听说C ++ 14在C ++标准库本身中引入了一个垃圾收集器。 这个function的基本原理是什么? 这不是RAI存在于C ++中的原因吗? 标准库垃圾收集器的存在将如何影响RAII语义? 对我(程序员)或者我编写C ++程序的方式有什么影响?

是否安全#define NULL nullptr?

我在下面的macros中看到了许多最顶级的头文件: #define NULL 0 // C++03 在所有的代码中, NULL和0可以互换使用。 如果我改变它。 #define NULL nullptr // C++11 会造成不良副作用吗? 我可以想到以下用法的唯一(好)副作用将会变形, int i = NULL;

使用C ++基类构造函数?

在处理模板的时候,我遇到了一个需要,即为了创build对象而从inheritance类访问基类构造函数,以减less复制/粘贴操作。 我想通过using关键字以相同的方式与function的情况下做到这一点,但这是行不通的。 class A { public: A(int val) {} }; class B : public A { }; class C : public A { public: C(const string &val) {} }; class D : public A { public: D(const string &val) {} using A::A; // g++ error: A::A names constructor }; void main() { B b(10); // […]

C ++ chrono系统时间(以毫秒为单位),时间操作

我有一个小问题是由于C ++ 11文档不足造成的。 我希望获得自毫秒或纳秒或秒以来的时间,然后我将不得不将这个值“投”到另一个分辨率。 我可以使用gettimeofday()来做到这一点,但它会很容易,所以我试图用std :: chrono来实现它。 我试过了: std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now(); 但是我不知道如何以这种方式获得决议,而且我不知道如何把这个时间当作一个简单的无符号的长整数,而我也没有任何概念如何将它转换成另一个决议。

如何处理Visual Studio中的noexcept

我试图创build一个自定义的exception,从std::exception并重写what() 。 起初,我是这样写的: class UserException : public std::exception { private: const std::string message; public: UserException(const std::string &message) : message(message) {} virtual const char* what() const override { return message.c_str(); } }; 这在VS2012中工作正常,但它不会在GCC 4.8中用-std=c++11编译: 错误:宽松抛出说明符'虚拟常量字符* UserException ::什么()const' 所以我加了noexcept : virtual const char* what() const noexcept override 这在GCC中工作正常,但在Visual Studio中不能编译(因为VS 2012不支持noexcept ): 错误C3646:'noexcept':未知的覆盖说明符 什么是处理这个build议的方式? 我想要使​​用这两个编译器编译相同的代码,我使用C ++ 11function,所以我不能用不同的-std编译。

用C ++ 11,是不是写了f(x ++),g(x ++)?

我正在阅读这个问题: 未定义的行为和顺序点 特别是C ++ 11的答案 ,并且我理解评估“sorting”的想法。 但是 – 当我写的时候是否有足够的顺序: f(x++), g(x++); ? 也就是说,我保证f()得到x的原始值, g()得到一个一次增加的x ? nitpickers注意事项: 假设operator++()已经定义了行为(即使我们已经覆盖它), f()和g() ,没有任何exception会被抛出,等等 – 这个问题不是这个问题。 假设operator,()没有被重载。

一个类不能有自己的静态constexpr成员实例吗?

此代码给我不完整的types错误。 问题是什么? 一个类不允许有自己的静态成员实例吗? 有没有办法达到同样的效果? struct Size { const unsigned int width; const unsigned int height; static constexpr Size big = { 480, 240 }; static constexpr Size small = { 210, 170 }; private: Size( ) = default; };

在C ++ 11中声明接口的最佳方法

众所周知,一些语言有接口的概念。 这是Java: public interface Testable { void test(); } 我怎样才能以最紧凑的方式在C ++(或C ++ 11)中实现这一点,而且代码噪声很小? 我将不胜感激一个解决scheme,不需要一个单独的定义(让头是足够的)。 这是一个非常简单的方法,即使我find越野车;-) class Testable { public: virtual void test() = 0; protected: Testable(); Testable(const Testable& that); Testable& operator= (const Testable& that); virtual ~Testable(); } 这只是一个开始,而且已经更长了,我想要的。 如何改善? 也许在这个std命名空间的某个地方有一个基类呢?