在临时对象上调用成员函数时生成警告

2024-01-02

给定一个矩阵模板类mat<M,N,T>以下成员函数允许我有效地转置行向量或列向量,因为它们具有相同/相应的内存占用:

template<int M, int N=M, typename T = double>
struct mat {
    // ...
    template<int Md = M, int Nd = N, typename = std::enable_if_t<Md == 1 || Nd == 1>>
    const mat<N, M, T>& transposedView() const {
        static_assert(M == 1 || N == 1, "transposedView() supports only vectors, not general matrices.");
        return *reinterpret_cast<const mat<N, M, T>*>(this);
    }
}

我已经使用这个函数很多年了,出于习惯,我开始在临时表达式上调用它(/*vector-valued expression*/).transposedView(),忘记了它会返回一个临时的引用,并导致未定义的行为,GCC 只是咬了我一口。

有没有一种简单的方法可以让我添加一些东西,当我临时调用它时会生成某种警告?

或者只要我不存储引用,临时调用它实际上应该是安全的吗?


成员函数可以是限定左值或右值对象 https://en.cppreference.com/w/cpp/language/member_functions#ref-qualified_member_functions。使用它,您可以创建一个重载集,例如

template<int M, int N=M, typename T = double>
struct mat {
    // ...
    template<int Md = M, int Nd = N, typename = std::enable_if_t<Md == 1 || Nd == 1>>
    const mat<N, M, T>& transposedView() & const {
        static_assert(M == 1 || N == 1, "transposedView() supports only vectors, not general matrices.");
        return *reinterpret_cast<const mat<N, M, T>*>(this);
    }
    template<int Md = M, int Nd = N, typename = std::enable_if_t<Md == 1 || Nd == 1>>
    const mat<N, M, T>& transposedView() && const = delete;
}

现在,如果您尝试使用右值对象调用该函数,您将收到编译器错误。

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

在临时对象上调用成员函数时生成警告 的相关文章

随机推荐

  • 需要帮助理解 CSS 选择性规则

    div a href class bar span class baz TEXT span a div 我是 CSS 菜鸟 但我的直觉告诉我a b
  • 返回脚本中使用的导入 Python 模块的列表?

    我正在编写一个程序 根据导入的模块对 Python 文件列表进行分类 因此 我需要扫描 py 文件的集合并返回它们导入的模块的列表 例如 如果我导入的文件之一包含以下行 import os import sys gtk 我希望它返回 os
  • 递归地从字符串中删除重复的字符

    我需要帮助来弄清楚如何从字符串中删除重复的字符 它必须递归地完成 这才是真正的问题 public class FEQ2 param args public static void removeDups String s int firstC
  • 如何旋转 TextView 而不剪切其边界?

    我正在尝试旋转我的子类TextView using canvas rotate canvas save final int w getWidth final int h getHeight float px w 2f float py h
  • 下载文件 - VB6

    有谁知道如何下载文件 无需打开网页 并将其保存到 Visual Basic 6 0 中的目录中 如果您只想使用代码 无互联网传输控制 来完成此操作 VBNet mvps org http vbnet mvps org index html
  • 获取 CultureInfo 中的当前语言

    如何使用识别操作系统的语言CultureInfo 例如 如果Windows中的语言设置为法语 我需要识别法语并加载fr资源文件数据 我认为这样的东西会给你当前的 CultureInfo CultureInfo currentCulture
  • Google + 登录按钮被阻止的框架

    我一直在尝试建立一种你好世界使用 Google 登录的项目 我按照教程进行操作https developers google com web signin https developers google com web signin 我的
  • Chrome`位置:固定;底部:0;`被 Android UI 遮挡

    我在 Android Chrome 上遇到以下代码问题 导航栏覆盖了页面底部的元素 test position fixed bottom 0 width 100 background red 桌面版 Chrome 正确 安卓浏览器 这是演示
  • 是否可以在管理面板中限制模型的对象创建?

    我只是想知道是否可以在管理面板中限制模型的对象数量 例如 我有一个名为 主页 的模型 在管理面板中我不希望用户可以创建多个主页实例 我有办法做到这一点吗 如果您只想影响管理员 并且不想影响数据库模型 则可以创建自定义 ModelAdmin
  • 无法从我的 App Engine 访问 Google Cloud SQL 数据库

    上周我尝试为 NodeJS API 和 Cloud SQL 数据库设置 Google Cloud 总体而言 它工作正常 但我无法访问我的 Cloud SQL 数据库 SQL数据库的授权表明当前项目内的所有应用都有权访问该数据库 不幸的是 事
  • focusout 事件后未触发单击事件

    Focusout事件之后 不再触发click事件 我的设计是
  • 创建 torrent 哈希信息

    如何在 torrent 文件上生成 torrent 哈希信息 我一直在看这个例子 如何使用 Java 计算 torrent 的哈希值 https stackoverflow com questions 3436823 how to calc
  • Mac OS X 雪豹上的 ant 默认安装在哪里?

    我没有设置ANT HOME 所以我想找到ant的主目录在哪里 我使用的是 OSX 安装中默认安装的 ant 版本 按照以下说明查找任何包的位置 whereis ant replace ant with whatever you re loo
  • 解析时 JSON 中位置 608 处出现意外字符串

    我正在尝试将我的 React 网站托管到 GitHub 但是当我尝试使用时 npm install save gh pages 我收到以下错误 Failed to parse json npm ERR JSON parse Unexpect
  • 为什么我的 Tkinter 饼图不显示?

    我正在构建一个应用程序 它接受输入 将其保存到 CSV 文件 现在最后一个基本部分是显示列内容的饼图 输入应该是关于书籍的 因此 饼图应该显示列表中所有书籍的类型 我在创建饼图时没有问题 我在单独的脚本中管理它 我也没有收到错误消息 但只有
  • JSF 转换标题属性的日期

    我需要将日期放入图像的标题属性中 以便当用户将鼠标悬停在图像上时显示该日期 问题是我想更改日期格式 有任何想法吗
  • 在子函数中访问循环迭代?

    我正在使用 Google Maps API 在地图上绘制多个点 然而 在下面的点击事件函数中 i始终设置为 4 即迭代循环后的值 note these are actual addresses in the real page var ad
  • Android apk安装:如何清除旧版本的文件?

    当我安装新版本的 apk 时 这会覆盖旧版本而不删除它 在新版本中 我删除了一些文件 使用 NDK 生成的库 但在设备上 旧文件仍然存在 如何确保每当安装新版本时 所有旧文件都会在安装前被删除 编辑 澄清 这个问题要求为我的应用程序的现有用
  • java.io.IOException:无法获取锁定

    得到错误为 java io IOException 无法获取 log abc log 的锁定 不知道为什么会发生这种情况 有人可以帮我吗 谢谢 logger LogManager getLogManager getLogger classN
  • 在临时对象上调用成员函数时生成警告

    给定一个矩阵模板类mat