问题标签 [inline-variable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
318 浏览

c++ - 内联静态自动的初始化程序“sizeof(T)”...是否需要实例化?

如果表达式的类型不依赖,但我们使用它来初始化静态自动变量,会发生什么?GCC 和 Clang 的行为不同

GCC 不会引发错误。但是 Clang 认为这是无效的,因为它实例化了“sizeof”的操作数。GCC 似乎跳过了该步骤,因为它sizeof(T{}.f)总是具有类型size_t(不依赖于类型),因此它已经知道类型,x而无需实例化。如果我们引用 ,则两个编译器都会一致地拒绝该程序x,例如通过(void) a.x;

它甚至必须解决类型x吗?如果我没记错的话,对于 C++14 及更高版本,该语言允许使用“占位符类型”来保存事物(如函数)并进行延迟实例化,以便稍后找出实际的返回类型。它是否也必须应用它x,所以x在我们提到之前保持占位符类型a.x

根据标准,哪个编译器是正确的?


编辑

有人问

嗯,这不应该等同于这个吗?

不同之处以及我在问题中关心的是,我的问题中的静态数据成员是auto. 因此,为了知道 的类型x,您需要知道初始化程序的类型。Clang 似乎急切地实例化初始化程序以获取类型。但显然 GCC 没有?我想了解发生了什么。

0 投票
2 回答
1097 浏览

c++ - 为什么 cppreference 将 type_traits xxx_v 快捷方式定义为内联 constexpr 而不仅仅是 constexpr?

为什么 cppreference 将 type_traits xxx_v 快捷方式定义为inline constexpr而不仅仅是constexpr

例如,请参阅is_integral_v

这只是风格问题还是行为上有一些差异?据我所知,constexpr变量是隐含的inline

编辑:查看最新标准的草案,它也使用inline constexpr. 那么这个问题实际上适用于标准。

0 投票
2 回答
577 浏览

c++ - 在匿名命名空间中定义全局 constexpr 变量与使它们内联相同?

跟进为什么 cppreference 将 type_traits xxx_v 快捷方式定义为内联 constexpr 而不仅仅是 constexpr?,如果我创建自己的类型特征并希望避免 ODR 违规并希望它与 C++17 之前的项目兼容,是否将 xxx_v 快捷方式放在匿名命名空间中与显式声明它内联相同?

例如,all_trueCheck traits for all variadic template arguments中获取,使用 C++17,我可以在我的实用程序头中编写:

这与编写以下与 pre-C++17 兼容的代码相同吗?

0 投票
0 回答
47 浏览

c++ - 标准库中的变量模板内联的任何具体原因?

C++17 引入了各种辅助变量模板,例如,

它们都被标记了inline。由于constexpr默认情况下暗示内部链接 [ ref ],即使没有inline,也不会违反单一定义规则。所以我认为这里没有inline必要。我也看不到它带来的任何好处。那为什么inline

0 投票
1 回答
2731 浏览

c++ - 所有 constexpr 变量都隐式内联吗?

我在玩自动模板参数,我很惊讶这段代码没有编译:

Visual Studio 15.7(预览版 4)吐出这些错误:

然后,添加后inline,错误就消失了!

我认为constexpr变量是隐含的inline。另外,这对我的变量的链接有何影响bar

0 投票
1 回答
114 浏览

c++ - 使用内联静态数据成员有什么潜在的陷阱吗?

C++17 引入了内联变量,并且可以在类定义中使用初始化器定义内联静态数据成员。它不需要类外定义。例如,

鉴于此,我认为没有理由不总是使用内联静态数据成员来获得简洁的语法。这样做有什么陷阱吗?请注意,我不介意编译速度较慢。

0 投票
3 回答
1182 浏览

c++ - 内联变量是否跨边界唯一?

这是对这个问题的跟进。
如答案的评论中所述:

内联变量具有以下特性 -它在每个翻译单元中具有相同的地址。[...] 通常你通过在 cpp 文件中定义变量来实现这一点,但是使用 inline 说明符你可以在头文件中声明/定义你的变量,并且每个使用这个内联变量的翻译单元都使用完全相同的对象。

此外,从答案本身来看:

虽然该语言不保证(甚至提及)跨共享库边界使用此新功能时会发生什么,但它确实适用于我的机器。

换句话说,当涉及共享库时,不清楚内联变量是否保证跨边界唯一。有人凭经验证明它适用于某些平台,但它不是正确的答案,它可能会破坏其他平台上的一切。

当跨边界使用内联变量时,它的唯一性是否有任何保证,或者它只是一个我不应该依赖的实现细节?

0 投票
1 回答
200 浏览

postgresql - postgres - 来自选择的内联变量赋值

在 SQL Server 中,可以进行内联变量赋值。

例如表 dbo.tbl 同义词:

当我运行这个:

DECLARE @body varchar(max)='aaa111xxx111ddd' SELECT @body = REPLACE(@body,keyword,replacement) FROM dbo.tblSynonym SELECT @body

结果应该是bbb111yyy111eee

因此, 的值@body将在每一行(交互)上更新,替换输入将来自源表上先前行的结果。

是否可以在 postgres 中做这样的事情(没有光标)?

谢谢

0 投票
2 回答
788 浏览

c++ - 头文件中的内联 std::mutex

std::mutex在不同的 cpp 文件中使用全局变量。

可以在头文件中声明它inline吗?

mtx这样构造的吗?

是否应该显式初始化?如:

0 投票
1 回答
294 浏览

c++ - 静态存储中的内联变量何时初始化?

C++ 标准(至少早于 C++17)已经说明了初始化顺序。

在同一翻译单元的命名空间范围内定义的静态存储持续时间并动态初始化的对象应按照其定义在翻译单元中出现的顺序进行初始化。

C++17 引入了内联变量,我认为这意味着可以在多个翻译单元中定义具有静态存储持续时间命名空间范围以及动态初始化的单个变量。

C++ 是否对这些变量的初始化顺序做出任何保证?