- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码摘自 Bruce Eckel 的 Thinking in C++ Volume 2 Chapter 16
//: C07:Wrapped.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Safe, atomic pointers
#include <fstream>
#include <cstdlib>
using namespace std;
ofstream out("wrapped.out");
// Simplified. Yours may have other arguments.
template<class T, int sz = 1> class PWrap
{
T* ptr;
public:
class RangeError {}; // Exception class
PWrap() { ptr = new T[sz]; out << "PWrap constructor" << endl; }
~PWrap() { delete []ptr; out << "PWrap destructor" << endl; }
T& operator[](int i) throw(RangeError)
{
if(i >= 0 && i < sz) return ptr[i];
throw RangeError();
}
};
class Cat
{
public:
Cat() { out << "Cat()" << endl; }
~Cat() { out << "~Cat()" << endl; }
void g() {}
};
class Dog
{
public:
void* operator new[](size_t sz) { out << "allocating a Dog" << endl; throw int(47); }
void operator delete[](void* p) { out << "deallocating a Dog" << endl; ::delete p; }
};
class UseResources
{
PWrap<Cat, 3> Bonk;
PWrap<Dog> Og;
public:
UseResources() : Bonk(), Og() { out << "UseResources()" << endl; }
~UseResources() { out << "~UseResources()" << endl; }
void f() { Bonk[1].g(); }
};
int main()
{
try
{
UseResources ur;
}
catch(int)
{
out << "inside handler" << endl;
}
catch(...)
{
out << "inside catch(...)" << endl;
}
}
我对代码本身没有任何问题。但是我在理解以下关于类异常 RangeError
的注释时遇到了一些问题:
“PWrap
模板显示了比您目前所见更典型的异常用法:A如果其参数超出范围,则创建名为 RangeError
的嵌套类以在 operator[ ]
中使用。因为 operator[ ]
返回一个引用,所以它不能返回零。 (没有空引用。)这是一个真正的异常(exception)情况——您不知道在当前情况下该做什么,并且你不能返回不可能的值。”
最佳答案
如果函数要返回一个指针而不是一个引用,那么它可以通过返回一个 NULL
指针来表示失败(即越界索引)。但是你不能有 NULL
引用,所以唯一可用的选择是抛出异常。*
正如@Steve 在下面的评论中指出的那样,您不希望 operator[]
返回一个指针,因为这意味着您需要编写如下内容:
T x = *wrapper[5];
断言
。
关于c++ - 为什么作者要强调operator[]不能返回0呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8309668/
我的英语很差,抱歉 这是我的结构: bookstore ---author(app1) ---book(app2) 或者在代码中: from django.db import models from
我有以下脚本从C:驱动器中检索特定文件类型,并将特定文件属性输出到定界的CSV文件。我还希望能够检索文件所有者和作者。很感谢任何形式的帮助。 # PowerShell script to list t
我们厌倦了掉毛。所以我们要使用 black在我们的项目中。不幸的是,它几乎改变了我们项目中的所有其他行,这会使我们丢失大部分作者信息。我们使用 annotate在 pycharm 或 git blam
我在我的asp.net网站中嵌入了java applet来进行数字签名,它在本地主机上工作,但是当发布它时,java applet在浏览器上运行但是未定义在java小程序上调用函数的java脚本代码
我无法找出一种有效的方法来建立表之间的关系。我想拥有一个包含书籍,作者,出版商和注册用户的数据库,并拥有他们的书架(阅读,当前阅读,想要阅读(或计划阅读))。我希望用户能够选择他们已经阅读,想要阅读或
我已经将我的 Git 作者作者姓名从“名尾 ”到“名尾 ” 这两个电子邮件地址与不同的 Github 帐户相关联,我正在将我所有的个人项目迁移到第二个。 我的问题是,我过去在某些私有(private)
我正在使用 svn2git 从现有的 SVN 存储库创建 Git 存储库。我把它全部下载了(所有 10 多个分支、10 多个标签、>4000 次提交)并在 Git 存储库中。现在,不幸的是,所有的作者
问题: 在 HTML 中,您可以使用 author 元标记(或 DC creator)来指示某人是信息(即内容)的作者。但是,我希望能够在元标记中将自己标记为 Web 应用程序开发人员。 大多数人(在
我确信在 git 中有一种方法可以做到这一点,但我的搜索结果是空的。有没有一种简单的方法可以从一次提交中获取消息、提交作者、提交日期和其他信息,并使用这些数据修改第二次提交,而无需复制实际的提交内容?
我已经设置了自己的私有(private) git 服务器,并且有一个 5 人的团队。我已经设置了他们的所有用户帐户,但是我如何防止由随机的奇怪帐户完成对远程的提交。因为我的一些团队也使用 github
我正在阅读这篇文章“http://lethain.com/introduction-to-architecting-systems-for-scale/”。最后,作者提到了平台层。我不明白这一层的范围
我需要在 Mac 上更改 PDF 文件的作者。我曾尝试使用 grep 和 sed 来完成此操作,但没有成功。 如果我在 Preview.app 中打开一个 PDF 文件并转到“工具”>“显示检查器”,
我正在运行此查询。它在 DBpedia ( http://dbpedia.org/sparql ) 上运行良好,但在我的 Java 代码中不起作用: PREFIX res: PREFIX dbped
我有一个用 C 语言模拟读者-作者问题的简单程序。要求用户输入作者数和读者数。然后创建随机数的编写器 - 线程和读取器 - 线程。项目的写入由全局变量 itemsCount 模拟 - 它代表新插入项目
我尝试在 wordpress 中设置一个作者页面。但是所有的作者页面都被重定向到主页。我用谷歌搜索,他们建议禁用插件,然后检查作者页面。我试了一下,发现 Yoast wordpress SEO plu
所以我从 SQL 背景转向 NoSQL。所以我知道我应该在这里“非规范化”。所以基本上我对我必须做的事情有一个简化的想法; 用户这些文件包含身份验证信息,可能是付款方式、用户名和各种详细信息 帖子这些
所以我已经成功地以 domenic 的身份提交了一个 GitHub 项目和 Domenic Denicola .这很烦人,尤其是对于生成摘要。 我知道 how to change the auth
在 PhpStorm 中,我很难在项目设置中设置默认的 git 作者: 我使用“Action finder”并搜索了设置,但我没有找到这个选项。 有谁知道我可以在哪里更改这个值,这样我就不必在每次提交
我一直在尝试使用 php5-ffmpeg 扩展来获取远程 mp3(和其他格式)元数据。 尽管我总是缺少标题、作者、评论、艺术家详细信息,但它正在工作。 我一直在网上搜索答案,但没有找到任何解决方案。
通常,将一些带有作者,版本和许可证信息的行添加到源文件的顶部被认为是一种好习惯。例如,Gnu GPL v3建议添加 Copyright (C) This program is free sof
我是一名优秀的程序员,十分优秀!