- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我用 C++ 编写代码,它使用 std::unique_ptr u
来处理 std::string
资源,我想取消引用 u
这样我就可以将 std::string
传递给 std::string
复制构造函数的调用:
std::string* copy = new std::string( /*dereference u here*/ );
我知道 new
或 std::string
复制构造函数可能会抛出异常,但这不是我的重点。我只是想知道取消引用 u
是否已经可以抛出异常。我觉得很奇怪 operator*
not 标记为 noexcept
而 std::unique_ptr
方法 get
实际上被标记为noexcept
。换句话说:
*( u.get() )
是 noexcept
作为一个整体而
*u
不是。这是标准中的缺陷吗?我不明白为什么会有所不同。有什么想法吗?
最佳答案
unique_ptr::operator*()
可能涉及对您存储在 unique_ptr
operator*()
重载的调用。请注意,存储在 unique_ptr
中的类型不必是裸指针,您可以通过嵌套类型 D::pointer
更改类型,其中 D
是 unique_ptr
的删除器的类型。这就是函数不是 noexcept
的原因。
此警告不适用于您的用例,因为您在 unique_ptr
中存储 std::string *
而不是重载 的某种类型运算符*
。所以这个调用对你来说实际上是 noexcept
。
关于c++ - std::unique_ptr 的 "No-throw dereferencing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434950/
我正在使用一个库 - HtmlUnit - 并且我刚刚从版本 2.4 更新到版本 2.5。当我针对 2.5 编译代码时,我收到一条我不熟悉的奇怪对象“无法取消引用”错误消息。此外,我不明白为什么当我用
我有 C 和 C++ 背景,一直认为 Java 中的解引用是通过对象的引用访问对象的过程。 例如“ref”是一个引用,当用于访问它所引用的Integer对象时,它被解引用: Integer r
这个问题已经有答案了: int cannot be dereferenced (3 个回答) 已关闭 9 年前。 我正在编写一个简单的 Java 程序来进行温度转换,并且在第 8 行(我已在下面的代码
请在说明中包含一个示例。 最佳答案 回顾基本术语 通常情况下就足够了 - 除非您正在编写程序集 - 设想一个 指针包含一个数字内存地址,其中 1 表示进程内存中的第二个字节,2 表示第三个字节,3 表
本题将从草稿N1570中获取信息,所以基本上是C11。 通俗地说,取消引用指针意味着将一元 * 运算符应用于指针。草稿文件中只有一处存在“取消引用”一词(没有“取消引用”的实例),并且位于脚注中: 1
我有这三个文件。使用结构体、函数和指针。 尝试这样做: void getName(Name *) - 接收指向名称的指针并执行操作 联系人.h struct Name { char firstNam
好的,所以我需要生成 7 个 1 到 100 之间的随机数,并将最大值打印在屏幕上。但是,当我编译此代码时: public class ArrayofTemperatures { public
我喜欢代码让我头疼的时候。除了这个。我只是使用一种常用的算法用随机 double 填充一个 vector 。问题是,在编译之后,它给了我一个“Iterator not dereferenceable”
我有 C 和 C++ 背景,一直认为 Java 中的解引用是通过对象的引用访问对象的过程。 例如“ref”是一个引用,当用于访问它所引用的Integer对象时,它被解引用: Integer r
本题将从草稿中抽取信息N1570 ,所以 C11 基本上。 通俗地说,取消引用指针意味着将一元 * 运算符应用于指针。文档草案中只有一个地方存在“取消引用”一词(没有“取消引用”的实例),并且在脚注中
我正在尝试实现一个提供 map 标记动画的库,但是当我尝试添加一些高级方法时,它在第二个“.withFillColor(Color.BLUE)”上抛出一个错误,其中显示:错误: void 无法取消引用
我收到以下代码的“int 无法取消引用”错误。任何帮助表示赞赏。谢谢: public int value() { int total = 0; **for (int i = 0; i < wallet
编译时我似乎收到“错误:int 无法取消引用”错误。我已经查找了发生这种情况的原因,尽管如此,我不确定如何解决它。 public class NetID_BaseballPitcher { S
这是我遇到问题的地方。 double num1 = Math.random(); double num2 = Math.random(); if (num1 < num2.nu
所以,我花了一些时间编写一些计算方法,以便在我正在尝试制作的角色扮演游戏的预览战斗窗口中获取一些导入数字(有人还记得《火焰纹章》吗?这是它的简化版本)。这是我尝试从这些 c 形成 jtable 的地方
我问的问题非常基础,但我试图通过在编译器中做练习来理解 C++ 中指针的行为。因此,例如,我首先声明一个 int 指针 *p 并尝试为其赋予一些值并打印它: #include using names
这里我有一些值,其中两个是整数,我不能对它们调用方法,因为它们不是引用。我该如何解决这个问题? String srcAddr, dstAddr, protocol; int srcPort, dstP
我有以下代码部分,它给出了明确的 null 取消引用。 uint64_t *var1 = NULL; char *var2 = NULL; //Alias transfer var1 = (uint6
在 C 中,是否可以为取消引用的指针定义别名/快捷方式? 即假设定义如下: void * ptr_to_my_variable = 0x2ff00000; 是否可以定义一个对应于 *ptr_to_my
假设我有这样的东西: class Collection { private: typedef std::vector >::iterator Iterator; std::vector
我是一名优秀的程序员,十分优秀!