【发布时间】:2014-10-30 16:30:51
【问题描述】:
考虑以下几点:
std::ostream out(nullptr);
这合法且定义明确吗?
如果我现在这样做呢:
out << "hello world\n";
这是否合法且定义明确?如果是这样,大概是一种无操作?
【问题讨论】:
-
如果我认为这样的事情应该有效并且似乎有效,我总是添加一个单元测试。这样,如果有人为另一个编译器/平台 stdlib 构建,那么他们就知道它坏了。
-
@paulm:我几乎同意,除了单元测试不是你应该用来验证定义良好的东西。
-
除非它访问内存越界或我没有看到问题?但是单元测试应该在启用应用程序验证器/valgrind 等的情况下运行
-
@paulm:这是因为您不能依赖 UB 来获得可靠、可重复或可立即检测到的症状。
-
您所依赖的晦涩行为应该始终在测试套件中,即使您发现它在标准中也是如此。像这样的某些事情可能是某些库/编译器实现中的未知错误。