问题标签 [inline-functions]

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 投票
3 回答
13413 浏览

c++ - 如何编写带参数的 lambda 函数?C++

我想用 lambda 函数调用一个方法(对于这个例子 std::thread 构造函数),传递 int 值:

我不知道如何正确编写这样的函数,我收到此错误:C2064: term does not evaluate to a functiontaking 0 arguments

0 投票
2 回答
281 浏览

sql - Inline SQL function which sometimes must update database

Is it possible to create a function/procedure, which could be used in a SQL statement like this:

INSERT INTO Journal(ProductID,Quantity) VALUES(LookupOrCreateProduct('12345678'),5)

LookupOrCreateProduct should look up a product table by string (barcode) and:
* If barcode is found - return Product ID
* If barcode is not found - create a new record in Products table with new barcode and return its ID

I explored SQL Server functions, but they do not allow INSERTs or any other database modification inside function body. Stored procedures can return values, but they can only be of int type. My ID column is bigint. Another option is to use output parameter but then it is not clear to me, how can I inline it in SQL statement. Thank you.

0 投票
1 回答
3718 浏览

c++ - extern "C" 内联函数

此代码会导致未定义的行为吗?

header.h

def.c

use.c

main.cpp

inline这是一个必须在 C 和 C++ 中都使用函数的程序示例。如果def.c被删除并且foo没有在 C 中使用,它会起作用吗?(这是假设 C 编译器是 C99。)

此代码在编译时有效:

foo只出现extern_C_inline一次,因为编译器在不同目标文件中输出的不同版本被合并,但我想知道这种行为是否由标准指定。如果我删除并使其extern定义,那么它将多次出现,因为编译器在每个编译单元中输出它。foostaticfooextern_C_inline

0 投票
1 回答
148 浏览

c++ - 内联函数体的潜在评估和模板成员的实例化

何时将标记为 inline 的函数中包含的表达式视为“可能已评估”?

a.cpp

b.cpp

如果定义内联函数后立即将表达式视为“可能评估”,则应实例化模板,并且我希望$(CCC) -c a.cpp; $(CCC) -c b.cpp; $(CCC) a.o b.o -o bin链接成功。相反,如果声明为 inline 的函数中的表达式仅在此类函数本身变为 odr-used 时才变为“潜在评估”,那么我预计$(CCC) -c a.cpp; $(CCC) -c b.cpp; $(CCC) a.o b.o -o bin在链接步骤期间会失败。

到目前为止,我已经测试了 xl C++ 12(链接成功)和各种版本的 gcc + clang 3.5(所有这些都无法链接)。

哪种行为是正确的?我在这里错过了第三种选择吗?

0 投票
1 回答
3084 浏览

c - Keil ARM C 编译器:内联函数的麻烦

我正在将实时内核TNeoKernel移植到 Cortex-M 架构,所以我已经安装了 Keil 并正在尝试构建内核。但是,我遇到了意想不到的问题:编译器似乎无法处理inline函数。这是简单的代码:

编译器的输出如下:

如果我删除inline关键字,它会编译并工作。

在 ARM Compiler 的文档中,我找不到任何关于inline函数的信息。所以,只是为了确保:inlineARM 编译器真的不支持关键字吗?太不可思议了,所以我决定问问。

static inline在内核的平台无关代码中有很多函数,那么,让它支持 ARM 编译器的最好方法是什么?在我的脑海中,我只有两个想法:

  • 创建与体系结构相关的宏,例如TN_INLINE,对于 ARM 编译器,它应该扩展为空;
  • 将非常小的 1 行函数转换为宏。
0 投票
3 回答
183 浏览

php - codeigniter 可以支持内联函数吗?

我们可以在 Codeigniter 的另一个函数中编写多个函数吗?这是我的控制器

根据我的控制器,myproduct() 中有 2 个内联函数。我的目标是将网址显示为

我已经尝试过了,但它给了我一个错误

第 5 行是

0 投票
2 回答
3399 浏览

c++ - “内联”关键字与“内联”概念

我问这个基本问题是为了让记录变得直截了当。已经提到了这个问题及其目前接受的答案,这并不令人信服。然而,投票第二多的答案提供了更好的洞察力,但也不是完美的。

在阅读下面的内容时,请区分inline 关键字和“内联”概念

这是我的看法:

内联概念

这样做是为了节省函数的调用开销。它更类似于宏样式的代码替换。没有什么可争论的。

inline关键字_

感知A

inline关键字是对编译器的请求通常用于较小的函数,以便编译器可以对其进行优化并进行更快的调用。编译器可以随意忽略它。

我对此提出异议,原因如下:

  1. 较大的递归函数没有内联,编译器会忽略该inline关键字。
  2. inline无论是否提及关键字,优化器都会自动内联较小的函数。

很明显,用户无法控制使用关键字内联的函数inline

知觉乙

inline与内联的概念无关。将大/递归函数放在inline前面将无济于事,较小的函数也不需要它,因为它是内联的。

唯一确定性用途inline是维护One Definition Rule

即,如果声明了一个函数,inline那么只有以下内容是强制性的:

  1. 即使在多个翻译单元中找到它的主体(例如在多个.cpp文件中包含该标头),编译器也只会生成 1 个定义并避免多符号链接器错误。(注意:如果该函数的主体不同,则它是未定义的行为。)
  2. 函数的主体inline必须在所有使用它的翻译单元中可见/可访问。换句话说,在任何一个文件中声明和定义inline函数都会导致其他文件出现“未定义符号链接器错误”.h .cpp.cpp

判决

“A”的看法是完全错误的,“B”的看法是完全正确的

在这方面有一些标准引用,但是我期待一个能从逻辑上解释这个判断是真还是假的答案。

0 投票
2 回答
1978 浏览

c - C 中的仅标头和仅静态内联库

我在 C 中编写了仅包含头文件的小型库和仅包含static-inline的库。当应用于大型库时,这会是一个坏主意吗?还是仅使用标头版本的运行时间可能会更快?好吧,不考虑明显的编译时间差异。

0 投票
3 回答
92 浏览

c - 我们应该使用宏、内联函数还是只使用普通函数并信任编译器?

将以下函数定义为宏或inline函数会更好吗?还是使用普通函数并信任编译器以保持(在我看来)更好的可读性更好?

0 投票
1 回答
57 浏览

c - 试图理解内联函数

我正在研究以下功能:

我只想知道是什么让这个特性,即计算和存储在变量中t