我们可以在 noexcept 规范中引用成员变量吗?

2024-01-09

请考虑以下代码片段:

template<class Tuple>
class vector
{
public:
    typename Tuple::size_type size() const noexcept(noexcept(m_elements.size())) {
        return m_elements.size();
    }

private:
    Tuple m_elements;
};

class tuple
{
public:
    using size_type = std::size_t;

    size_type size() const { return 0; }
    size_type size() noexcept { return 0; }
};    

int main()
{
    vector<tuple> x;
    static_assert(noexcept(x.size()), "x.size() might throw");

    return 0;
}

是成员变量的使用m_elements在 - 的里面noexcept说明符合法吗?GCC 5.2 (C++17) 产生编译器错误 http://coliru.stacked-crooked.com/view?id=7d2a18fa7e70f9e0 m_elements在这方面没有申明. while clang 3.6 (C++17) 编译没有任何错误 http://coliru.stacked-crooked.com/view?id=13b213cf8de3b9b1.

如果我使用,两个编译器都不会产生错误noexcept(std::declval<Tuple const&>().size())反而。但是,正如您所看到的,我创建了一个简单的示例类tuple是否至关重要Tuple具有合格的过载size.

从我的角度来看,这样写更直观noexcept(m_elements.size())因为它正是函数体中的调用,并且它考虑到了size的方法vector is const合格(这使得m_elements函数范围内的 const 对象)。

那么,合法用途是什么?如果两者等效,我应该使用哪一个?我应该使用noexcept在这种情况下有资格赛吗?问题在于,无论vector在大多数情况下,函数会抛出依赖于Tuple.


Clang 在这里是正确的,这是 gcc bug52869 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52869。根据[基本.范围.类] http://eel.is/c++draft/basic.scope.class#1,强调我的:

类中声明的名称的潜在范围不仅包括以下声明区域 名称的声明点,也是所有函数体、默认参数的声明点,异常规范, and 大括号或等号初始化器该类中的非静态数据成员(包括嵌套中的此类内容) 类)。

范围m_elements包括noexcept 规范 for size().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以在 noexcept 规范中引用成员变量吗? 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Python Pandas 迭代行并访问列名

    我正在尝试迭代 Python Pandas 数据帧的行 在数据帧的每一行中 我尝试通过列名称引用行中的每个值 这是我所拥有的 import numpy as np import pandas as pd df pd DataFrame np
  • InlineData 或 TestCase 属性的 Microsoft 单元测试替代方案是什么?

    Microsoft 以外的单元测试框架可以选择使用属性添加输入参数和预期结果 例如 NUnit 有 TestCase 12 4 3 并且 xUnit 有 InlineData 5 1 3 9 微软采取什么方法来实现这一目标 需要添加Nuge
  • 手动(aapt)将本机库.so添加到apk

    由于多种原因 我正在手动构建我的项目 或多或少遵循以下步骤http geosoft no development android html http geosoft no development android html 不使用 ant 我
  • 如何创建一个新线程以使 pcap_loop() 和 gtk_main() 兼容?

    这两个函数都是无限循环 一旦在同一线程中调用 程序就会挂起 gtk main pcap loop adhandle 0 packet handler NULL 当我点击 开始 按钮时 我想要pcap to start工作 如果我按下 停止
  • 元素中插入

    我喜欢 p Variable Text p 我希望它是 p Variable span Text span p 这可以通过 JavaScript 函数实现吗 或 jQuery 哦 是的 p 元素有一个 ID p 元素内的文本是可变的 但始终
  • 打嗝不起作用:FileNotFoundException:无法在类路径上找到 ../as__init.class 或 ../as.clj

    我刚刚开始使用 clojure 我正在尝试构建一个小型网络应用程序 我想尝试打嗝 但似乎不起作用 我的代码如下 项目 clj defproject WebTest 0 1 0 SNAPSHOT description FIXME write
  • Django SECRET_KEY 是每个实例还是每个应用程序?

    这个问题 https stackoverflow com questions 7382149 purpose of django setting secret key 47117966 noredirect 1 comment9026458
  • 从 selectKbest 获取特征名称

    我使用 Scikit 学习selectKbest从 900 个特征中选择大约 500 个最佳特征 如下 其中 d 是所有特征的数据框 from sklearn feature selection import SelectKBest chi
  • 如何更改小型转储中模块的校验和?

    我编写 和销售 的软件在分发之前经过压缩和加密 每次发布新版本时 我都会在压缩和加密之前保留所有 map 文件和生成的二进制文件 包括 exe 当它在客户端计算机上崩溃时 我会得到一个小型转储 我在 Visual Studio 中打开这些小
  • Matplotlib窗口出现在后面?

    每当我打电话show 在 matplotlib 中 绘图窗口出现在所有其他窗口后面 我必须最小化所有内容才能看到它 有什么方法可以阻止这种情况或以编程方式将其带到前台 在 OSX Lion 上 Python 2 7 出色地 这个答案是在已接
  • ifelse 命令中的多个 true 条件

    在R中我们使用ifelse 测试 是 否 命令 我面临的问题是 如果协调结果为真 我需要执行各种声明 例如 ifelse fp 月 1 fp sum sales 1 fp sum sales 2 0 所以我给出两个条件 if fp mont
  • 为什么我的 Django 表单一直显示“此字段为必填字段”

    有谁知道为什么我的表单 文件选择器 在更简单的版本中工作时不断返回 此字段是必需的 我的看法是 def add attempt request m id a id template loader get template add attem
  • 在 C++ 中将 pytorch 张量转换为 opencv mat,反之亦然

    我想在 C 中将 pytorch 张量转换为 opencv mat 反之亦然 我有这两个功能 cv Mat TensorToCVMat torch Tensor tensor std cout lt lt converting tensor
  • 我可以在 C 程序中使用 C++ 库吗?

    我正在用 C 编写一个程序 但我想使用像向量一样的动态库 是否可以在 C 程序中使用 C 库 Not std vector 不 任何模板化的东西都是正确的 一般来说 使用 C 代码并不有趣 但这是可以做到的 您必须将类包装在 C 代码可以调
  • Assembly.LoadFrom 和依赖项

    我一直在尝试使用 Assembly LoadFrom 设置一个插件系统 该系统动态加载 exe 目录的子文件夹中的 dll 我有一个由 exe 和插件引用的接口库 构建完成后 我将插件 dll 复制到子文件夹中 不同的插件可能有共同的库 所
  • Android 可绘制语音气泡

    我已经找了好几天了 但找不到任何关于如何绘制气泡或在哪里绘制 9 个补丁图像用作背景的好线索 我是一个糟糕的艺术家 有人可以帮忙吗 我找到的最好的示例位于 Stack Overflow 上 但它是用 Objective C 编写的 如何在i
  • Java 方法引用抛出 NPE

    于是我就上了一堂课 public class MenuBar extends JMenuBar MenuBarController controller public MenuBar JMenu menu new JMenu File me
  • Google Analytics 跟踪代码给出 CORS 错误

    我正在使用 在我看来 昨天从我的帐户获得的新 Google Analytics 跟踪代码 它使用了一些 全局站点标签 我已按照 GA 的指示将其放置在我的 顶部 但在加载页面时遇到跨源错误 因此 GA 无法正确跟踪我的网站 这是确切的消息
  • django Rest 框架中的 django_countries

    我正在尝试创建一个 API 它可以使用 django countries 返回所有国家 地区 我正在尝试以下操作 但它不起作用 作为一个单独的字段 它工作正常 但对于完整的国家 地区列表 它会给出错误 from django countri
  • 我们可以在 noexcept 规范中引用成员变量吗?

    请考虑以下代码片段 template