我们可以在 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 规范中引用成员变量吗? 的相关文章

随机推荐

  • 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