标签: inline

__inline__是什么意思?

我正在努力学习C.通过阅读一些代码,我遇到了这样的一行:

__inline__ void () ...
Run Code Online (Sandbox Code Playgroud)

什么__inline__意思?如何将这个词放在函数前面使它与众不同?

c inline

32
推荐指数
3
解决办法
1万
查看次数

内联朋友功能的范围是什么?

在搜索到SO之后,一个问题告诉我,内联友元函数的词法范围是它定义的类,这意味着它可以访问例如typedef类中的s而不限定它们.但后来我想知道这种功能的实际范围是什么?海湾合作委员会至少拒绝我所有打电话的尝试.可以通过除ADL以外的方式调用示例中的函数,由于没有参数,这是不可能的吗?

标准报价表示赞赏,因为我目前无法访问我的副本.

以下代码

namespace foo{
  struct bar{
    friend void baz(){}
    void call_friend();
  };
}

int main(){
  foo::baz();           // can't access through enclosing scope of the class
  foo::bar::baz();    // can't access through class scope
}

namespace foo{
  void bar::call_friend(){
    baz();    // can't access through member function
  }
}
Run Code Online (Sandbox Code Playgroud)

导致这些错误:

prog.cpp: In function ‘int main()’:
prog.cpp:9: error: ‘baz’ is not a member of ‘foo’
prog.cpp:10: error: ‘baz’ is not a member of ‘foo::bar’
prog.cpp: In member …
Run Code Online (Sandbox Code Playgroud)

c++ scope inline friend

32
推荐指数
2
解决办法
5911
查看次数

display:block inside display:inline

我想了解当CSS所在的元素是CSS的元素的display:blockDOM子元素时会发生什么display:inline(因此块元素是内联元素的子元素).

CSS 2.1规范的匿名块框部分描述了这种情况:该示例包括以下规则......

body { display: inline }
p    { display: block }
Run Code Online (Sandbox Code Playgroud)

......以及附带的文字说......

BODY元素包含匿名文本的块(C1),后跟块级元素,后跟另一个匿名文本块(C2).生成的框将是BODY周围的匿名块框,包含C1周围的匿名块框,P块框和C2周围的另一个匿名块框.

如果你有一个display:inline父元素,并且如果这个父元素有一个子元素,那么这个子元素display:block的存在似乎使得父元素几乎表现得像display:block,并忽略它被定义为的事实(因为父元素display:inline现在只包含匿名元素)和非匿名阻止子,即它不再包含任何内联子项)?

我的问题是,在这种情况下(有display:block孩子的地方)那么父母的定义之间有什么区别display:inline而不是display:block


编辑:我更了解CSS 2.1标准,而不是各种浏览器实现在实践中的表现.


第二编辑:

规范中有一个区别.在下面的文档中,第二个"块"段的边框围绕整个段落和页面的整个宽度; 而第一个'内联段落的边框是在段落内的每一行(即使有多行),并且不超过每行的确切宽度(每行比页面宽度短).

<html>
<head>
<style type="text/css">
p.one 
{
border-style:solid;
border-width:1px;
display: inline;
}
p.two 
{
border-style:solid;
border-width:1px;
}
</style>
</head>
<body>
<p class="one">Some text. <b>Note:</b> The "border-width"
property does not work if it is used alone. Use the …
Run Code Online (Sandbox Code Playgroud)

css inline

30
推荐指数
2
解决办法
2万
查看次数

GCC内联C++是否在没有'inline'关键字的情况下运行?

在编译C++代码时,GCC是否会尝试通过选择未标记inline关键字的内联函数来优化速度?

c++ optimization gcc inline optimizer-hints

30
推荐指数
2
解决办法
1万
查看次数

为什么在2个不同的cpp文件中定义内联全局函数会产生神奇的结果?

假设我有两个.cpp文件file1.cppfile2.cpp:

// file1.cpp
#include <iostream>

inline void foo()
{
    std::cout << "f1\n";
}

void f1()
{
    foo();
}
Run Code Online (Sandbox Code Playgroud)

// file2.cpp
#include <iostream>

inline void foo()
{
   std::cout << "f2\n";
}

void f2()
{
    foo();
}
Run Code Online (Sandbox Code Playgroud)

main.cpp我已经向前宣布f1()f2():

void f1();
void f2();

int main()
{
    f1();
    f2();
}
Run Code Online (Sandbox Code Playgroud)

结果(不依赖于构建,调试/发布版本的结果相同):

f1
f1
Run Code Online (Sandbox Code Playgroud)

哇:编译器以某种方式仅选择定义file1.cpp并在其中使用它f2().这种行为的确切解释是什么?

注意,改变inlinestatic是这个问题的解决方案.将内联定义放在未命名的命名空间中也可以解决问题并且程序打印:

f1
f2
Run Code Online (Sandbox Code Playgroud)

c++ inline translation-unit

30
推荐指数
3
解决办法
3141
查看次数

Objective-C中的static,extern和inline

做什么static,extern并且inline(和它们的组合)使用LLVM编译器Objetive-C是什么意思?

另外,我注意到有CG_EXTERNCG_INLINE宏.我们应该使用那些吗?

(我找不到一个有明确解释的来源,所以我认为在这里创建一个可能有用,或者如果有人知道它可能会指向它)

static inline objective-c llvm extern

29
推荐指数
2
解决办法
2万
查看次数

内联函数链接器错误

我正在尝试使用特定类的内联成员函数.例如,没有内联的函数声明和实现是这样的:

在头文件中:

int GetTplLSize();
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中:

int NeedleUSsim::GetTplLSize()
{
    return sampleDim[1];
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,如果我将"inline"关键字放在实现和声明中的任何一个中,以及两个地方,我都会收到链接器错误,如下所示:

 Creating library C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x and object C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp 
mexfunction.obj : error LNK2019: unresolved external symbol "public: int __thiscall NeedleUSsim::GetTplLSize(void)" (?GetTplLSize@NeedleUSsim@@QAEHXZ) referenced in function _mexFunction 
mexfunction.mexw32 : fatal error LNK1120: 1 unresolved externals 

  C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: Error: Link of 'mexfunction.mexw32' failed. 

为了摆脱这个错误需要做什么(即在制作这些内联成员函数方面我做错了什么)?

c++ inline linker-errors

28
推荐指数
3
解决办法
2万
查看次数

内联与constexpr?

使用新的C++ 11标准,何时应该在inline关键字上使用constexpr关键字?constexpr关键字是否提供任何额外的优化inline,或仅仅断言必须在编译时计算事物?

为什么constexpr在调用不稳定的某些情况下在GCC 上工作,例如调用foo(x)constexpr变量?这是GCC中的错误还是它实际上是标准的一部分?

c++ optimization inline constexpr c++11

28
推荐指数
2
解决办法
7074
查看次数

为什么类成员函数内联?

我想我之前已经问过我的问题了,我确实读了它们但仍然很少混淆,因此要求说清楚.

The C++ standard says all member functions defined inside class definition are inline

我也听说编译器可以忽略函数的内联.在上述情况下是否会成立,或者如果在类定义中定义,它将始终内联?

此外,这个设计背后的原因是什么,使所有函数在类定义中内联定义?内联与源文件和头文件有什么关系?

更新:所以如果不进行内联,应该总是在课外定义它们的功能,对吧?

JohnB的更新2: 在类定义中声明的两个函数永远不能互相调用,因为它们必须包含另一个函数的整个主体.在这种情况下会发生什么?(已由Emilio Garavaglia回答)

c++ compiler-construction inline class function

28
推荐指数
3
解决办法
9891
查看次数

GHC不优化主模块以外的模块

我目前正在Haskell中编写一个多模块程序.我发现了一个奇怪的问题,我的文件没有正确优化,即使我正在传入-O2等等.有问题的文件是共享的3D矢量数学模块.当单独编译为.o时,这些模块已正确优化.当使用--make编译为较大程序的一部分时,它们未正确优化.核心是完全不同的.

我在vector.hs文件中添加了一些简单的精简测试代码:

data TestVector = TestVector !Double !Double !Double !Double

addVec :: TestVector -> TestVector -> TestVector

addVec (TestVector x1 y1 z1 w1) (TestVector x2 y2 z2 w2) =
  TestVector (x1 + x2) (y1 + y2) (z1 + z2) (w1 + w2)
Run Code Online (Sandbox Code Playgroud)

并从主要进口...

import Vector
Run Code Online (Sandbox Code Playgroud)

这个代码的编译方式与独立的.hs文件不同,而不是在构建main.hs时使用 --make

我的命令行是:

ghc -tmpdir tmp -hidir hi -odir obj -fext-core -fexcess-precision -funbox-strict-fields -threaded -rtsopts -fwarn-missing-signatures -Wall -O2 Main.hs -o main
Run Code Online (Sandbox Code Playgroud)

干杯

optimization haskell inline ghc

27
推荐指数
1
解决办法
615
查看次数