int/double/等的构造函数语义是:
int a; // uninitialized
int b = int(); // zero initialized
int c = int(4); // four是否有可能定义一个具有完全相同行为的类?即同时具有未初始化和已初始化的默认构造函数的构造函数?我认为这是不可能的,目前通过创建一个构造函数来解决这个问题,这个构造函数只在调用0时编译,但希望确保没有一种方法可以精确地模仿基本类型。
发布于 2012-04-12 05:32:08
也许你可以这样做:
template<typename T>
struct uninitialized {
    static_assert(std::is_trivially_destructible<T>::value,"T must have trivial dtor");
    alignas(T) char raw[sizeof(T)];
    template<typename... Us>
    T &initialize(Us &&... us) {
        return *(new (raw) T(std::forward<Us>(us)...));
    }
    T &get() { return reinterpret_cast<T&>(raw); }
};需要使用简单的析构函数,否则您必须跟踪对象是否已被构造,以便适当地销毁它。
https://stackoverflow.com/questions/10113872
复制相似问题