L****8 发帖数: 3938 | 1 比如这种
std::vector A;
A[1] 就会抛异常 应该返回一个null object |
p***o 发帖数: 1252 | 2 你定义好什么叫null object自己写一个这样的vector也花不了几分钟。
【在 L****8 的大作中提到】 : 比如这种 : std::vector A; : A[1] 就会抛异常 应该返回一个null object
|
L****8 发帖数: 3938 | 3 怎么做 你举个例子
【在 p***o 的大作中提到】 : 你定义好什么叫null object自己写一个这样的vector也花不了几分钟。
|
s******u 发帖数: 501 | 4 原因就是为了效率
事实上你说的这个连异常都不抛,因为不管是抛异常还是返回null都需要做一个范围的
判断,这就是额外的操作了。C++设计的原则之一就是尽量的高效,比如
initialization list就是为了省下一次变量的初始化,等等。如果想方便或者安全,
自己加代码
【在 L****8 的大作中提到】 : 比如这种 : std::vector A; : A[1] 就会抛异常 应该返回一个null object
|
L****8 发帖数: 3938 | 5 明明是弱点 非要说是效率
【在 s******u 的大作中提到】 : 原因就是为了效率 : 事实上你说的这个连异常都不抛,因为不管是抛异常还是返回null都需要做一个范围的 : 判断,这就是额外的操作了。C++设计的原则之一就是尽量的高效,比如 : initialization list就是为了省下一次变量的初始化,等等。如果想方便或者安全, : 自己加代码
|
e***i 发帖数: 231 | 6 弱点的原因是因为权衡,而不是考虑不周。
取舍的思想在C++里就是尽量以效率为上,难免会牺牲其他方面。
【在 L****8 的大作中提到】 : 明明是弱点 非要说是效率
|
L****8 发帖数: 3938 | 7 来点干货 讲讲怎么设计null object
【在 e***i 的大作中提到】 : 弱点的原因是因为权衡,而不是考虑不周。 : 取舍的思想在C++里就是尽量以效率为上,难免会牺牲其他方面。
|
s******u 发帖数: 501 | 8 你拿到一个null object有毛用?
【在 L****8 的大作中提到】 : 来点干货 讲讲怎么设计null object
|
b****n 发帖数: 2 | 9 #include
#include
#include "boost/optional.hpp"
using namespace std;
template
class Vector : public std::vector {
public:
using TT = boost::optional;
TT operator[](size_t index) const noexcept {
if(index >= this->size()) {
return boost::none;
} else {
return std::vector::operator [](index);
}
}
};
int main() {
Vector AAA;
if(!AAA[0]) cerr << "none" << endl;
AAA.push_back(1);
if(AAA[0]) cerr << "AAA[0]: " << AAA[0] << endl;
} |
L****8 发帖数: 3938 | 10 还是不行 达不到 matlab 用[] 代表一切null数据 nullobject的效果
【在 b****n 的大作中提到】 : #include : #include : #include "boost/optional.hpp" : using namespace std; : template : class Vector : public std::vector { : public: : using TT = boost::optional; : TT operator[](size_t index) const noexcept { : if(index >= this->size()) {
|
t*****n 发帖数: 4908 | 11 matlab和c++不是一个量级的东西。前者仅仅用于教学,类似脚本语言。后者是企业开
发工具。没有任何比较的意义。
【在 L****8 的大作中提到】 : 还是不行 达不到 matlab 用[] 代表一切null数据 nullobject的效果
|
L****8 发帖数: 3938 | 12 弱点 承认就好
【在 t*****n 的大作中提到】 : matlab和c++不是一个量级的东西。前者仅仅用于教学,类似脚本语言。后者是企业开 : 发工具。没有任何比较的意义。
|
w***x 发帖数: 105 | 13 弄清楚事情再抱怨, 不然闹笑话。去看vector::at的帮助。 |
L******g 发帖数: 1371 | 14 操, 你就不可以check一下vector.empty() |