我偶然发现了一些我以前从未见过的东西.在Backbone.js的示例TODO应用程序(Backbone TODO示例)的源代码中,他们将模板放在a中<script type = "text/template"></script>
,其中包含的代码看起来像是PHP之外但带有JavaScript标记的代码.
谁可以给我解释一下这个?这是合法的吗?
我试图找出我的代码认为它正在使用的Boost版本.我想做这样的事情:
#error BOOST_VERSION
但预处理器不会扩展BOOST_VERSION.
我知道我可以在程序运行时打印出来,我知道我可以查看预处理器的输出来找到答案.我觉得在编译期间有一种方法可以使用它.
我正在编写一个内部循环,需要将struct
s放在连续的存储中.我不知道有多少这些struct
会提前出现.我的问题是STL vector
将其值初始化为0,所以无论我做什么,我都要承担初始化的成本以及将struct
成员设置为其值的成本.
有没有办法阻止初始化,或者是否有一个类似STL的容器,那里有可调整大小的连续存储和未初始化的元素?
(我确信这部分代码需要进行优化,我确信初始化是一项重要的成本.)
另外,请参阅下面的评论,以了解初始化发生的时间.
一些代码:
void GetsCalledALot(int* data1, int* data2, int count) {
int mvSize = memberVector.size()
memberVector.resize(mvSize + count); // causes 0-initialization
for (int i = 0; i < count; ++i) {
memberVector[mvSize + i].d1 = data1[i];
memberVector[mvSize + i].d2 = data2[i];
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
在构造函数中应该完成多少工作?
我心里想着一些建议,但我不记得推理.
我似乎记得在某些时候阅读一些建议(不记得来源)C++构造函数不应该做真正的工作.相反,他们应该只初始化变量.建议继续解释实际工作应该在某种init()方法中完成,在创建实例后单独调用.
情况是我有一个代表硬件设备的类.构造函数调用查询设备的例程以构建描述设备的实例变量对我来说具有逻辑意义.换句话说,一旦new实例化对象,开发人员就会收到一个准备好使用的对象,不需要单独调用object-> init().
施工人员不应该做真正的工作有充分的理由吗?显然它可能会减慢分配时间,但如果在分配后立即调用单独的方法,则不会有任何不同.
只是想弄清楚我目前没有考虑的问题可能导致了这样的建议.
请解释如何使用成员初始化列表.我有一个在.h
文件中声明的类和一个.cpp
这样的文件:
class Example
{
private:
int m_top;
const int m_size;
...
public:
Example ( int size, int grow_by = 1 ) : m_size(5), m_top(-1);
...
~Example();
};
Run Code Online (Sandbox Code Playgroud)
我正在初始化m_size
对象创建,因为const
.我该如何编写构造函数?我应该重复: m_size(5), m_top(-1)
,还是我可以省略这一步?
Example::Example( int size, int grow_by)
{
... some code here
}
Run Code Online (Sandbox Code Playgroud)
要么
Example::Example( int size, int grow_by) : m_size(5), m_top(-1)
{
... some code here
}
Run Code Online (Sandbox Code Playgroud) 在引擎盖下,STL映射是一个红黑树,它使用其键的<运算符或用户提供的比较来计算元素插入的位置.
map :: find()返回与提供的键匹配的元素(如果存在任何匹配)
如果不使用相等运算符,它怎么能这样做呢?假设我的地图中包含密钥1,2,3和4.仅使用<,我可以看到键2应该在1之后,2之后和3之前.但我不知道2是否与2相同.
我甚至可以在/usr/include/c++/4.4.3/bits/stl_tree.h中看到find()只使用用户提供的比较函数:
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc>
typename _Rb_tree<_Key, _Val, _KeyOfValue,
_Compare, _Alloc>::iterator
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
find(const _Key& __k)
{
iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
return (__j == end()
|| _M_impl._M_key_compare(__k,
_S_key(__j._M_node))) ? end() : __j;
}
Run Code Online (Sandbox Code Playgroud)
隐秘.如果你可以告诉我如何在_M_impl._M_key_compare
没有明显循环的情况下最终使用比较函数,那么奖励积分.
这个问题与这个问题相反.
val x = Some((1, 2))
val (y: Option[Int], z: Option[Int]) = ???
Run Code Online (Sandbox Code Playgroud)
纯Scala答案和Scalaz答案都很有帮助.
这是我在Linux上编译的一些代码:
#include <net/if.h>
int main() {
struct ifreq ifr;
}
Run Code Online (Sandbox Code Playgroud)
gcc test.c
很好.
gcc -std=gnu99 test.c
很好.
gcc -std=c99 test.c
失败,出现以下错误:
test.c: In function ‘main’:
test.c:4:16: error: storage size of ‘ifr’ isn’t known
Run Code Online (Sandbox Code Playgroud)
与C99有什么不同,它不喜欢struct ifreq
Linux中的定义?
在C89中,floor()返回一个double.以下保证是否有效?
double d = floor(3.0 + 0.5);
int x = (int) d;
assert(x == 3);
Run Code Online (Sandbox Code Playgroud)
我担心的是,在IEEE 754中,地板的结果可能并不完全可以表示.所以d得到类似2.99999,而x最终为2.
对于这个问题的答案是肯定的,int范围内的所有整数必须完全可以表示为双精度,而floor必须始终返回该精确表示的值.
在Python中,长整数具有无限精度.我想写一个16字节(128位)整数到一个文件.struct
标准库中只支持最多8个字节的整数.array
有同样的限制.有没有办法在没有屏蔽和移动每个整数的情况下执行此操作?
这里有一些澄清:我正在写一个将从非Python程序中读取的文件,因此pickle已经出来了.全部使用128位.
c++ ×3
stl ×2
backbone.js ×1
biginteger ×1
c ×1
c89 ×1
c99 ×1
constructor ×1
find ×1
floor ×1
gcc ×1
gnu99 ×1
hardware ×1
ieee-754 ×1
javascript ×1
linux ×1
macros ×1
map ×1
optimization ×1
python ×1
scala ×1
scala-option ×1
struct ×1
templates ×1
tuples ×1
types ×1
vector ×1