这个问题的灵感来自一个类似的问题:delete []"如何"知道操作数数组的大小?
我的问题有点不同: 有没有办法以编程方式确定C++数组的大小?如果没有,为什么? 我看到的每个接受数组的函数也需要一个整数参数来赋予它大小.但正如链接问题指出的那样,delete[]
必须知道要释放的内存大小.
考虑这个C++代码:
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
Run Code Online (Sandbox Code Playgroud)
这打印" Size of arr: 4
",这只是指针的大小.有一些打印256的函数会很好,但我不认为C++中存在一个函数.(同样,问题的一部分是为什么它不存在.)
澄清:我知道如果我在堆栈上声明数组而不是堆(即" int arr[256];
"),则sizeof
运算符将返回1024(数组长度*sizeof(int)).
我正在使用javascript处理xhtml.我通过连接nodeType == Node.TEXT_NODE的所有子节点的nodeValue来获取div节点的文本内容.
生成的字符串有时包含一个不间断的空间实体.如何用常规空格字符替换它?
我的div看起来像这样......
<div><b>Expires On</b> Sep 30, 2009 06:30 AM</div>
网上发现的以下建议不起作用:
var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
var cleanText = replaceHtmlEntities(text);
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {
"nbsp": " ",
"amp" : "&",
"quot": "\"",
"lt" : "<",
"gt" : ">"
};
return function(s) {
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
}
})();
Run Code Online (Sandbox Code Playgroud)
有什么建议?
让我们说由于某种原因你需要写一个宏:MACRO(X,Y)
. (我们假设您有一个很好的理由不能使用内联函数.) 您希望此宏模拟对没有返回值的函数的调用.
if (x > y)
MACRO(x, y);
do_something();
Run Code Online (Sandbox Code Playgroud)
if (x > y)
MACRO(x, y);
else
MACRO(y - x, x - y);
Run Code Online (Sandbox Code Playgroud)
do_something();
MACRO(x, y)
do_something();
Run Code Online (Sandbox Code Playgroud)
编写宏的天真方式是这样的:
#define MACRO(X,Y) \
cout << "1st arg is:" << (X) << endl; \
cout << "2nd arg is:" << (Y) << endl; \
cout << "Sum is:" << ((X)+(Y)) << endl;
Run Code Online (Sandbox Code Playgroud)
这是一个非常糟糕的解决方案,它失败了所有三个例子,我不应该解释原因.
忽略宏实际上做的事情,这不是重点.
现在,我经常看到编写宏的方法是将它们用大括号括起来,如下所示:
#define MACRO(X,Y) \
{ \
cout << "1st arg is:" << …
Run Code Online (Sandbox Code Playgroud) 我的公司在NO_BACKSLASH_ESCAPES模式下运行MySQL.如何在此模式下转义文字%
或_
LIKE查询?标准方式是\%
,但在此模式下不起作用.
示例:列具有以下值:5% off
,50% off
.以下查询在标准模式下工作,但在NO_BACKSLASH_ESCAPES模式下不起作用:
SELECT * FROM mytable
WHERE mycol LIKE '5\% off'
Run Code Online (Sandbox Code Playgroud) 我正在启动一个java jar文件,它通常需要超过默认的64MB最大堆大小.但是这个应用程序的256MB堆大小已足够.无论如何指定(在清单中可能?)在启动jar时总是使用256MB的最大堆大小?(如果需要,请在下面提供更多具体细节.)
这是一个我用Java编写的命令行应用程序,它可以进行一些图像操作.在高分辨率图像(大约12百万像素及以上,这并不罕见)我得到一个OutOfMemoryError.
目前我正在从jar文件启动应用程序,即
java -jar MyApp.jar params...
我可以通过在命令行上指定256MB最大堆大小来避免OutOfMemoryError,即:
java -Xmx256m -jar MyApp.jar params...
但是,我不想指定这个,因为我知道即使对于高分辨率图像,256MB也足够了.我想将这些信息保存在jar文件中.那可能吗?
我在Javascript中有一个数字,我知道它不到10000而且也是非负数.我想将它显示为一个四位数字,带有前导零.有没有比以下更优雅的东西?
if(num<10) num="000"+num;
else if(num<100) num="00"+num;
else if(num<1000) num="0"+num;
Run Code Online (Sandbox Code Playgroud)
我想要一些内置于Javascript中的东西,但我似乎找不到任何东西.
在Java的构造函数中,如果要调用另一个构造函数(或超级构造函数),它必须是构造函数中的第一行.我假设这是因为在其他构造函数运行之前不应该允许修改任何实例变量.但是为什么你不能在构造函数委托之前有语句,以便计算其他函数的复杂值?我想不出任何好的理由,而且我遇到了一些真实的案例,我写了一些丑陋的代码来解决这个限制.
所以我只是想知道:
举一个我正在谈论的例子,考虑一下我在StackOverflow中给出的一些代码.在那段代码中,我有一个BigFraction类,它有一个BigInteger分子和一个BigInteger分母."规范"构造函数是BigFraction(BigInteger numerator, BigInteger denominator)
表单.对于所有其他构造函数,我只是将输入参数转换为BigIntegers,并调用"规范"构造函数,因为我不想复制所有工作.
在某些情况下,这很容易; 例如,带两个long
s 的构造函数是微不足道的:
public BigFraction(long numerator, long denominator)
{
this(BigInteger.valueOf(numerator), BigInteger.valueOf(denominator));
}
Run Code Online (Sandbox Code Playgroud)
但在其他情况下,这更难.考虑采用BigDecimal的构造函数:
public BigFraction(BigDecimal d)
{
this(d.scale() < 0 ? d.unscaledValue().multiply(BigInteger.TEN.pow(-d.scale())) : d.unscaledValue(),
d.scale() < 0 ? BigInteger.ONE : BigInteger.TEN.pow(d.scale()));
}
Run Code Online (Sandbox Code Playgroud)
我觉得这很难看,但它有助于我避免重复代码.以下是我想要做的,但它在Java中是非法的:
public BigFraction(BigDecimal d)
{
BigInteger numerator = null;
BigInteger denominator = null;
if(d.scale() < 0)
{
numerator = d.unscaledValue().multiply(BigInteger.TEN.pow(-d.scale()));
denominator = BigInteger.ONE;
}
else
{
numerator = d.unscaledValue();
denominator = BigInteger.TEN.pow(d.scale());
}
this(numerator, …
Run Code Online (Sandbox Code Playgroud) 在PHP中,我有以下代码:
<?PHP
$var = .000021;
echo $var;
?>
Run Code Online (Sandbox Code Playgroud)
输出为2.1E-5!
为什么?它应该打印.000021