当前位置: 首页 > 知识库问答 >
问题:

constexpr与匿名命名空间

满勇军
2023-03-14
constexpr int some_val = 0;

VS

namespace {
   const int some_val = 0;
}

我习惯了第二种方法,但第一种方法是等价的吗?

共有1个答案

公羊绪
2023-03-14

未命名的命名空间充当static:变量的链接。

namespace {
   const int some_val = 0;
}

相当于:

static const int some_val = 0;

constexpr不会更改以下内容:Demo

现在我们可以比较constconstexpr:

  • constexpr变量是编译时已知的不可变值(因此可用于常量表达式)
  • 常量变量是不可变值,可以在运行时初始化。
int get_int() {
    int res = 0; 
    std::cin >> res;
    return res;
}

const int value = get_int();
constexpr int value = get_int(); // Invalid, `get_int` is not and cannot be constexpr
const int some_val = 0; // equivalent to constexpr int some_val = 0;
 类似资料:
  • 但是,如果实用工具类是从Qt类派生的,我会出现链接错误。我认为问题出在Q_OBJECT宏上,如果我不添加它,我就不会得到错误。但是在任何Qt派生类中都必须/建议使用Q_OBJECT宏。 我怎样才能避免这个ISUE?有没有其他方法来拥有一个具有文件作用域的实用程序类? 用于显示错误的简单示例:CMyClass类使用从QWidget派生的实用工具类(名为CUtility)。 错误有: LNK2001:

  • 问题内容: 命名空间Python程序包(no )和常规Python程序包(具有)之间有什么区别,尤其是对于常规程序包为空时? 我很好奇,因为最近我一直忘了自己制作的包装,而且我从没发现任何问题。实际上,它们的行为似乎与常规软件包相同。 编辑:命名空间包仅受Python 3.3支持(请参阅PEP 420 ),因此自然地,此问题仅适用于Python 3。 问题答案: 阅读Aaron和PEP420的链接

  • 尽管 JavaScript 支持一对花括号创建的代码段,但是并不支持块级作用域; 而仅仅支持 函数作用域。 function test() { // 一个作用域 for(var i = 0; i < 10; i++) { // 不是一个作用域 // count } console.log(i); // 10 } 注意: 如果不是在赋值语句中,而是在 ret

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码

  • Let the word of Christ dwell in you richly in all wisdom; teaching and admonishing one another in psalms and hymns and spiritual songs, singing with grrace in your hearts tto the Lord. And whatsoever

  • 客户端有许多“命名空间”,通常是一些公开的可管理功能。命名空间对应 Elasticsearch 中各种可管理的 endpoint。下面是全部的命名空间: **命名空间** **功能** `indices()` 索引数据统计和显示索引信息 `nodes()` 节点数据统计和显示节点信息 `cluster()` 集群数据统计和显示集群信息 `snapshot()` 对集群和索引进行拍摄快照或恢复数据