C++11 空PTR的差异
我想知道同一类型的2混凝土nullptr之差是否保证等于0。我在C++标准中找不到任何可以保证的东西。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:
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是具体的指针类型。