在"The C++ Programming Language"一书的第7.1.1节中,作者指出:
"内联函数仍然有一个唯一的地址,内联函数的静态变量也是如此"
我很迷惑.如果我有一个内联函数,那么它就没有地址.这也发生在C吗?
这个问题很简单,我可以感受到RTFM的到来.但是,我整个上午都在看文档(Inline,Inline-C,Inline-C-Cookbook),我无法弄清楚如何解决这个问题.
我想使用内联C,但我不想在与perl代码相同的文件中使用C代码.
(Emacs不喜欢在一个文件中使用两种语言.原则上这是方便的,但实际上我必须在一个文件中编辑我的C然后将其复制粘贴到我的perl脚本中.)
这是工作perl:
#!/usr/bin/perl
use Inline C => DATA;
use strict;
use warnings;
use List::Util qw(sum);
use feature qw(say);
my @array = (1..10);
say "native perl: ", sum(@array), ", Inline C: ", sum1(\@array);
__END__
__C__
double sum1(AV* array) {
int i;
double sum = 0.0;
for (i=0; i<=av_len(array); i++) {
SV** elem = av_fetch(array, i, 0);
if (elem != NULL)
sum += SvNV(*elem);
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
(感谢mobrule让我这么远.)
我想将所有C代码(或尽可能多的)移动到单独的头文件中.
我可以做的是放入sum1 …
考虑这样的代码:
import numpy as np
cimport numpy as np
cdef inline inc(np.ndarray[np.int32_t] arr, int i):
arr[i]+= 1
def test1(np.ndarray[np.int32_t] arr):
cdef int i
for i in xrange(len(arr)):
inc(arr, i)
def test2(np.ndarray[np.int32_t] arr):
cdef int i
for i in xrange(len(arr)):
arr[i] += 1
Run Code Online (Sandbox Code Playgroud)
我使用ipython来测量test1和test2的速度:
In [7]: timeit ttt.test1(arr)
100 loops, best of 3: 6.13 ms per loop
In [8]: timeit ttt.test2(arr)
100000 loops, best of 3: 9.79 us per loop
Run Code Online (Sandbox Code Playgroud)
有没有办法优化test1?为什么不把cython内联这个函数告诉?
更新:其实我需要的是这样的多维代码:
# cython: infer_types=True
# cython: boundscheck=False
# cython: wraparound=False …Run Code Online (Sandbox Code Playgroud) 我想在HTML中嵌入JSON.我发现的最优雅的解决方案是使用script-tag和mime媒体类型application/json.
<script id="data" type="application/json">
{
"foo" : "bar"
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是嵌入JSON的标准方法吗?如果没有,上述解决方案是否有任何风险?
使用内联JSON(而不是JSON-P服务)的原因:
[更新]嵌入json的原因.
我有一个画廊小部件,用于流量非常高的网站.画廊可以包含100张或更多图像.我一次只显示一个图像,其余图像将延迟加载.但是,所有图像的信息(图像src)将在页面加载的html中呈现.有各种方法在html中呈现图像信息.而不是使用JSON我也可以使用html数据属性,如下所示:
<li class="image" data-src="image-path.jpg">
<!-- image tag will be created here using javascript -->
</li>
Run Code Online (Sandbox Code Playgroud)
将导致:
<li class="image image-loaded" data-src="image-path.jpg">
<img src="image-path.jpg" />
</li>
Run Code Online (Sandbox Code Playgroud)
上述解决方案的缺点是额外的标记.我宁愿使用JSON和JavaScript的模板引擎如doT.js.
有没有办法在颤动中禁用线条的 linting 规则?
我有一个特定的用例,我想禁用两行的 linting。我已经写了很多业务逻辑,所以我无法更改代码。
abstract class ReviewName {
static final NEW = 'NEW';
static final OLD = 'OLD';
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会有 linting 错误: Name non-constant identifiers using lowerCamelCase.dart(non_constant_identifier_names)
有什么方法可以避免仅两行的 lint 错误?
我想要一个带有非整数常量的头文件,例如一个类.注意常数也并不需要是一个编译时间常数.
static const std::string Ten = "10";
Run Code Online (Sandbox Code Playgroud)
这编译但不可取,因为每个编译单元现在都有自己的Ten副本.
const std::string Ten = "10";
Run Code Online (Sandbox Code Playgroud)
这将编译但会因为多重定义的Ten的链接器错误而失败.
constexpr std::string Ten = "10"s;
Run Code Online (Sandbox Code Playgroud)
这可以工作,但前提是字符串构造函数也是constexpr.它会但是我不能指望每个非整数常量都有一个constexpr构造函数......或者我可以吗?
extern const std::string Ten = "10";
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我担心如果我错误地呼吸,我会收到链接器错误.
inline const std::string Ten( ) { return "10"; }
Run Code Online (Sandbox Code Playgroud)
这有我想要的一切,除了干净的语法.另外,现在我必须将常量称为函数调用Ten().
inline const std::string = "10";
Run Code Online (Sandbox Code Playgroud)
这似乎是理想的解决方案.当然inline,标准不允许变量.
我想在html表中嵌入一堆小图像,我想用MFMailComposeViewController发送它.在做了一些搜索之后,我发现几乎所有人都建议使用"Matt Gallagher的NSData + Base64"类来编码Base64encoding中的照片并将其嵌入到html中.虽然它看起来适用于iPhone和一些电子邮件服务器,但Gmail和Yahoo不会以这种方式显示嵌入的图像.这里也提到了这个问题.
我想知道是否有人有更好的解决方案.我不想在网上上传照片并将链接放在html代码中.我想将图像附加到电子邮件中,并在html文本,表格中显示为内嵌图像,...
我记得在其中一本C++书籍(很久以前)中读到,内联构造函数和析构函数尤其适用于派生类并不是一个好主意.我理解内联会导致一些膨胀的目标代码,但有没有其他设计考虑因素阻碍内联构造函数和析构函数?当然,大多数编译器可能会拒绝内联并继续创建一个函数体,但如果他们要内联可能需要支付的惩罚?
我想基于dll导出的类定义派生类.基类在项目A中定义,派生类在项目B中定义.
首先,在项目A中,定义了预处理器MYDLL_BUILD.我使用头文件来指定导出/导入:
#if !defined(MYDLL_BUILD)
# pragma comment(lib, "myDll.lib")
#endif
#if defined(MYDLL_BUILD)
# define MYDLL_API __declspec(dllexport)
#else
# define MYDLL_API __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)
然后我定义基类:
class MYDLL_API DllObject
{
public:
virtual ~DllObject() {}
protected:
DllObject() { m_count = 3; }
private:
int m_count;
};
Run Code Online (Sandbox Code Playgroud)
在项目B中,未定义预处理器MYDLL_BUILD.这是派生类:
class MyClass : public DllObject
{
public:
~MyClass(){}
MyClass() { m_data = 20; }
private:
int m_data;
};
Run Code Online (Sandbox Code Playgroud)
我已经包含了dll和lib文件,但仍然得到了未解析的外部符号错误:
2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall ADAI::DllObject::~DllObject(void)" (__imp_??1DllObject@ADAI@@UAE@XZ) referenced in function "public: virtual __thiscall …Run Code Online (Sandbox Code Playgroud) 我想使用内联IF设置一个SASS变量,类似于它在PHP或Javascript中的完成方式
这样的事情可能吗?
$myVar: ($something >= 10 ? true : false);
Run Code Online (Sandbox Code Playgroud)
我知道@if控制指令,但我想使用更短的内联语法.