我的《编程范例》教科书,《编程语言基础》(第3版)第1章有一个练习:
练习1.12
通过用subst-in-s-exp的定义代替它的定义并简化生成的过程,消除对subst-in-s-exp的一次调用。结果将是不需要subst-in-s-exp的subst版本。这项技术称为内联,用于优化编译器。
原始代码将具有两个功能:subst并且subst-in-sexp基本上将输入符号中所有出现的旧符号替换为新符号。
(define subst
(lambda (new old slist)
(if (null? slist) '()
(cons
(subst-in-s-exp new old (car slist))
(subst new old (cdr slist))))))
(define subst-in-s-exp
(lambda (new old sexp)
(if (symbol? sexp)
(if (eqv? sexp old) new sexp)
(subst new old sexp))))
Run Code Online (Sandbox Code Playgroud)
这个问题的答案是消除subst-in-sexp,这就是
(define subst
(lambda (slist old new)
(cond
[ (null? slist) '()]
[ (eqv? (car slist) old) (cons new (subst (cdr slist) old new))]
[ else (cons (car …Run Code Online (Sandbox Code Playgroud) 我必须显示无法在c ++中内联的函数.
要检查这个,我有标志-Winline设置.
使用递归函数,我能够生成一个无法内联的函数.
但我尝试使用继承和"虚拟"关键字.但我不能让编译器抱怨内联不可能出现问题.
我知道这个话题已经涵盖了很多.但我没有找到一个有效的例子.我的编译器"聪明":-)
我试过这个:
class virt1
{
public:
virt1(){};
inline virtual int virtFunc(int a){ return a*a; };
virtual ~virt1(){};
};
class virt2 : public virt1
{
public:
virt2(){};
inline virtual int virtFunc(int a){ return a+a;};
virtual ~virt2(){};
};
void testVirtFunc(virt2 &obj)
{
std::cout << obj.virtFunc(2);
}
Run Code Online (Sandbox Code Playgroud) 我有以下页面与一些HTML/CSS:http://jsfiddle.net/Hf6dB/1/
由于某种原因,屏幕顶部工具栏的按钮右边缘.左边,上边和下边的边距都可以,因为容器有一个填充,但边距在哪里?
也是在页面的真实版本中,你在小提琴上看不到,因为没有图标,我在每个菜单条目中都有类似的问题:
<li>
<div class="draggable">
<input id="tb-btn-search" title="Search" type="button">
<p>Search</p>
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
当鼠标离开按钮时,其<p>宽度可以使用CSS过渡从0变为2.由于某种原因,当宽度<p>为零时,图标不再居中,因为在这里,还有一个额外的边距来自任何地方.
这是否与内联块显示属性的使用有关?
谢谢你的帮助!
我正在尝试定义以下函数(在Seq模块名称中共享空间).
module Seq =
let scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
Run Code Online (Sandbox Code Playgroud)
然而,类型推断强加元素和值是类型int.我希望这个方法可以处理整数(8位,16位等),浮点数(单和双)等.
为什么类型推断会跳转到int,以及如何使此函数更通用?
我在Boost库中读取了类address_v4的源代码,并且有几个用BOOST_ASIO_DECL声明的构造函数(定义为内联)
/// Construct an address from raw bytes.
BOOST_ASIO_DECL explicit address_v4(const bytes_type& bytes);
/// Construct an address from a unsigned long in host byte order.
BOOST_ASIO_DECL explicit address_v4(unsigned long addr);
Run Code Online (Sandbox Code Playgroud)
(从此处http://www.boost.org/doc/libs/1_64_0/boost/asio/ip/address_v4.hpp)
# define BOOST_ASIO_DECL inline
Run Code Online (Sandbox Code Playgroud)
(从这里http://www.boost.org/doc/libs/1_64_0/boost/asio/detail/config.hpp)
那么,为c ++构造函数指定“内联”的目的是什么?它与函数的含义相同还是具有不同的含义?
bt.sh
#!/bin/bash
echo -e 'scan on\n'
sleep 2
echo -e 'devices\n'
echo -e 'quit\n'
Run Code Online (Sandbox Code Playgroud)
如果我将上述文件通过管道传输到 bluetoothctl,它会按预期工作。
# ./bt.sh | bluetoothctl
Run Code Online (Sandbox Code Playgroud)
但是如何将其作为内联脚本执行,我尝试了以下操作但它不起作用并且 bluetoothctl 似乎没有注册命令:
echo -e 'scan on' | bluetoothctl && sleep 2 && echo -e 'devices\n' | bluetoothctl && echo -e 'quit\n' | bluetoothctl;
Run Code Online (Sandbox Code Playgroud) 我正在研究 Angular,并试图根据"cardData.color".
例如
cardData = {id: '1', color: '#202020'};
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下面显示的代码,但它不起作用。
<div style="background-color: {{cardData.color}}; padding: 10px 20px;"></div>
Run Code Online (Sandbox Code Playgroud)
有什么办法,我可以根据对象的颜色动态设置背景颜色??谢谢你。
作为问题的后续问题我应该在头文件中定义静态内联方法吗?
如果我在两个单独的 cpp 文件中有两个具有相同签名的辅助函数,则编译器会抱怨 ODR。因此,在 cpp 文件中创建自由函数static以避免名称冲突并减少链接器的工作是否是一种好风格?
更一般地问:什么是打免费功能的优点和缺点inline,static或static inline在CPP文件?
当我在类外创建 input() 函数时,calculation() 函数不起作用......它与内联函数有关系吗??
#include <iostream>
using namespace std;
class price
{
public:
int pen;
int rubber;
int scale;
void input()
{
cout<<"enter the variables\n";
cin>>pen>>rubber>>scale;
cout<<"\n"<<pen<<" "<<rubber<<" "<<scale;
}
};
void calculate(price p)
{
int rate[2],total;
rate[0]=p.pen*5;
rate[1]=p.rubber*3;
rate[2]=p.scale*4;
total=rate[0]+rate[1]+rate[2];
cout<<"\n"<<total;
}
int main()
{
price a,b,c;
a.input();
calculate(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)