Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 空PTR的差异_C++11 - Fatal编程技术网

C++11 空PTR的差异

C++11 空PTR的差异,c++11,C++11,我想知道同一类型的2混凝土nullptr之差是否保证等于0。我在C++标准中找不到任何可以保证的东西。 template <typename T> std::ptrdiff_t diff() { T* p = nullptr; T* q = nullptr; return p - q; } 换句话说,此代码是否必须返回0 我问这个问题的原因是我想用 template <typename T> class Vector { private:

我想知道同一类型的2混凝土nullptr之差是否保证等于0。我在C++标准中找不到任何可以保证的东西。
template <typename T>
std::ptrdiff_t diff() {
    T* p = nullptr;
    T* q = nullptr;
    return p - q;
}
换句话说,此代码是否必须返回0

我问这个问题的原因是我想用

template <typename T>
class Vector {
private:
    T* data_;
    T* size_;
public:
    int size() const {
        return static_cast<int>(size_ - data_);
    }
}

我想知道,当我构造一个长度为0的向量时,是否允许把数据放在上面。不,不是。nullptr是特殊类型std::nullptr_t的文本,它不是整数类型。事实上,nullptr-nullptr是一个错误,因为没有为该类型定义-operator。您需要将nullptr转换为具体的指针类型,就像问题所做的那样,以使减法有效。

@Mat:您是对的。这是一个复制品。但另一方面,这个问题还没有得到回答thread@Mat:我误读了第一个线程及其引用的标准。问题已被回答,结果保证为0。谢谢。这让人困惑。为什么大小是T*而不是size\T?在我的示例中,p和q是具体的指针类型。