“使用”类范围的类型别名:[何时]方法中的用法可以在类型别名之前?

2023-12-02

昨天,当我能够编译具有使用以下方法的代码时,我感到(愉快地)惊讶:使用类型别名即使别名的声明直到稍后才在类定义中声明。

  • 类型别名的这种“前向”用法是否有效? (我认为是这样,因为 Clang 5 和 GCC 4.9 都是这样工作的。)
  • 什么规则涵盖了这种行为以及方法主体和方法签名用法之间的差异?

情况 #1 - 使用在方法后声明的方法,在方法体内有效(仅?)

#include <string>
#include <iostream>

struct X {
  std::string create() {     // fails to compile if Y used in signature
      return Y{"hello!"};    // compiles when Y here
  }

  using Y = std::string;     // declared at bottom
};

int main() 
{
    std::cout << X().create() << std::endl;
}

情况#2 - 使用上面声明的签名[也]有效

#include <string>
#include <iostream>

struct X {
  using Y = std::string;     // declared at top

  Y create() {               // can use Y here as well
      return Y{"hello!"};
  }
};

int main() 
{
    std::cout << X().create() << std::endl;
}

这与完整的类上下文。当您处于成员函数的主体中时,该类被认为是完整的,并且可以使用类中定义的任何内容,无论它是在类中的何处声明的。

成员函数的返回类型不属于完整的类上下文因此您只能使用代码中此时已知的名称。

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

“使用”类范围的类型别名:[何时]方法中的用法可以在类型别名之前? 的相关文章

  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 该方法必须返回 int 类型

    public int computeStyle String season if season equals summer if this style equals toque return 8 if this style equals s
  • 将目录附加到 Windows 中的 PATH 环境变量

    所以 我有这个批处理文件 据说它将我的脚本附加到路径变量中 echo OFF setx path path cd script py 但我遇到了一些问题 附加我的 script py 将导致路径大于 1024 个字符 从而输出警告 警告 保
  • 如何在 dagger 2.10 中创建自定义作用域模块

    我正在尝试将公司应用程序迁移到 dagger 2 10 和AndroidInjector inject方法 但我想我发现了一个问题 该应用程序使用自定义作用域 就像登录功能一样 它有 3 个活动 每个活动都有自己的 dagger 模块 和一
  • 为什么双重检查锁定中使用易失性

    From 头先设计模式手册中 具有双重检查锁定的单例模式已实现如下 public class Singleton private volatile static Singleton instance private Singleton pu
  • 在 Windows 上使用 JDK 1.4 监控 Tomcat 5.5

    根据这个文档http tomcat apache org tomcat 5 5 doc monitoring html Enabling JMX Remote应该可以远程监控在 JDK 1 4 上运行的 Tomcat 5 5 服务器 但在搜
  • SQL/Windows 操作系统释放未使用的空间

    我最近对我的数据进行了一些归档 并执行了以下操作 我的数据库表包含超过 3300 万条记录 其中许多是重复的 我备份了表并将唯一数据插入到新表中 然后重命名 交换表名称 这实现了我所需要的 然而现在我只剩下两张桌子了 Table1 良好 活
  • UIImageencodeWithCoder 可以识别的选择器吗?

    我收到此错误 但我不知道如何修复它 我刚刚添加了 Apple 示例 LazyTableImages 中的延迟加载以及照片位置示例项目中的 UIImageToDataTransformer 类 2011 07 08 UIImage encod
  • 以 PHP 计算利率

    我正在尝试计算给定初始贷款金额 还款次数和还款金额的贷款利息 我似乎无法使用基本公式获得足够接近的数字 因此我一直在尝试使用牛顿拉夫森方法 可以在此处看到该方法的使用 http www efunda com formulae finance
  • “clear:both”和“overflow:hidden”是否以相同的方式使容器包裹浮动子项?

    我有一个带有浮动儿童的 div 我知道我可以通过以下两种方式拉伸高度 container border 2px solid ccc margin bottom 250px container 2 after content display
  • 如何以编程方式卸载应用程序

    I tried this this以编程方式卸载应用程序 我没有收到任何错误或异常 但该应用程序未从我的计算机上卸载 另请参阅尝试过的代码 public static string GetUninstallCommandFor string
  • 尝试在不允许该表的页面上插入记录

    当尝试从扩展程序创建新记录时 我收到上面的消息 尝试在不允许该表的页面上插入记录 我尝试在其中创建记录的 页面 是 sysfolder 而不是页面 t3lib extMgm allowTableOnStandardPages user my
  • 使用 openSSL 在 PHP 中加密(大)文件

    我正在尝试使用 AES 加密 PHP 中的 大 文件 并研究了使用 Mcrypt 和 OpenSSL 问题是到目前为止我发现的所有解决方案都只加密字符串 而我尝试加密的文件将触发最大PHP 的内存限制 不幸的是不能设置得更高 我将如何实现这
  • 以编程方式读取资源字符串

    我大约有 6 个 dll 没有源代码 它们不包含任何逻辑 而只是包含字符串表的 resx 文件 有没有一种方法可以从每个 dll 的字符串表中提取 Id 和值并将其导出到文本文件 知道程序集名称和资源文件 您可以使用反射加载它 Resour
  • 在 MySql 中检测日期是否处于夏令时

    我继承了一个遗留应用程序 其中所有日期和时间都存储在本地时区 英国 中 我无法改变它们的存储方式 但是 要求是在应用程序中显示 GMT 中的所有日期 因此 当我从数据库中检索事件列表时 我需要它以这种时间格式显示所有事件 同时观察每个特定事
  • 获取所有公共用户贡献,又名“日历数据”(github api v3)

    我发现了很多线程 甚至有几个项目使用 github api 之外的 api 嵌入了贡献日历 但这些方法或线程都没有真正回答这个问题 一个接近但这是不行的 我只是想获取用户的贡献总数 如 github 个人资料页面上的日历所示 如下所示 ap
  • 多个垂直 100% 高度和宽度 div

    我试图创建多个宽度和高度均为 100 的 div 但始终失败 例子 div div 100 height width all you can see when opening this file div div I ll be 100 wh
  • Vim 自动完成,包括当前文件和字典

    在 Vim 中 我们可以通过使用字典或当前文件来完成代码 以提出建议 但我所追求的是两者兼得 我的 vimrc 有以下代码完成 k uses dictionary i uses current and included files t ta
  • 自动播放声音最“兼容”的方式是什么?

    我想在我的页面中添加一个自动播放的声音 但似乎所有方式都需要一些插件或 codex 或 idk 所以我不太确定什么是最好的音频格式和编码方式 以便它适用于大多数用户和浏览器 有没有适合大多数人的方法 Thanks 您可以使用BGSOUND像
  • 如何在使用 CURRENT_SOURCE_DIR 的子目录中定义 cmake 宏?

    我想做的是创建一个CMakeLists txt它定义了一个在父作用域中使用的方便宏 我可以很好地使用宏 然而 我使用了 CMAKE CURRENT SOURCE DIR 不幸的是 它不是定义宏的 CMake 脚本的目录 而是调用它的目录 我
  • “使用”类范围的类型别名:[何时]方法中的用法可以在类型别名之前?

    昨天 当我能够编译具有使用以下方法的代码时 我感到 愉快地 惊讶 使用类型别名即使别名的声明直到稍后才在类定义中声明 类型别名的这种 前向 用法是否有效 我认为是这样 因为 Clang 5 和 GCC 4 9 都是这样工作的 什么规则涵盖了