我一直在研究,没有任何相关的问题,所以我来到这里.
我试图避免内存泄漏,所以我想知道:
假设我有一个MyClass成员ints a和b一个类int array c,它们填充了一个成员函数:
class MyClass
{
public:
int a, b;
int c[2];
void setVariables()
{
a, b = 0;
for (int i = 0; i < 2; i++)
{
c[i] = 3;
}
}
};
int main(int argc, char* argv[])
{
MyClass* mc = new MyClass();
mc->setVariables();
delete mc;
}
Run Code Online (Sandbox Code Playgroud)
现在,我打电话后delete mc,会a,b以及所有的内容c被删除?或者我必须在析构函数中明确地做到这一点MyClass?
nginx.conf如下:
http {
server {
listen 8080;
server_name example.com;
root /tmp/test/example;
location / {
index index.html;
try_files $uri /test.html;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我访问时example.com:8080,它访问/tmp/test/example/test.html,而不是index.html.
对于以下代码:
#include <iostream>
using std::cout; using std::endl;
template <typename T>
int compare(const T&, const T&) {
cout << __PRETTY_FUNCTION__ << endl;
return 0;
}
template <size_t N, size_t M>
int compare(const char (&)[N], const char (&)[M]) {
cout << __PRETTY_FUNCTION__ << endl;
return 0;
}
int main(int argc, char *argv[]) {
compare("hi", "is");
}
Run Code Online (Sandbox Code Playgroud)
当我编译代码时g++ -std=c++1y,它会抱怨:
error: call of overloaded ‘compare(const char [3], const char [3])’ is ambiguous
compare("hi", "is");
Run Code Online (Sandbox Code Playgroud)
根据模板重载的规则,可行的功能是:
compare(const T&, const T&) with T = …Run Code Online (Sandbox Code Playgroud) 根据Javascript the Definitive Guide第6版中的3.8.3节:
要将对象转换为字符串,JavaScript将执行以下步骤:
•如果对象具有toString()方法,则JavaScript会调用它.如果它返回原始值,JavaScript会将该值转换为字符串(如果它不是字符串)并返回该转换的结果.请注意,表3-2中的原始到字符串转换都已明确定义.•如果对象没有
toString()方法,或者该方法没有返回原始值,则JavaScript会查找valueOf()方法.如果方法存在,JavaScript会调用它.如果返回值是基元,则JavaScript会将该值转换为字符串(如果尚未存在)并返回转换后的值.•否则,JavaScript不能获得,无论是从原始值
toString()或valueOf(),所以它抛出一个TypeError.
例如:
var obj = {
toString: function() {
console.log('toStirng...');
return 90;
},
valueOf: function() {
console.log('valueOf...');
return 80;
}
}
console.log(obj + '');
Run Code Online (Sandbox Code Playgroud)
因此,上面的代码片段会obj因为而转换为字符串obj + '',所以它应该打印:
toString...
90
Run Code Online (Sandbox Code Playgroud)
但实际上,它打印:
valueOf...
80
Run Code Online (Sandbox Code Playgroud)
那有什么不对?不obj + ''转换obj为字符串?
我正在编写一个bash函数来获取所有git存储库,但是当我想将所有git存储库路径名存储到数组时,我遇到了一个问题patharray.这是代码:
gitrepo() {
local opt
declare -a patharray
locate -b '\.git' | \
while read pathname
do
pathname="$(dirname ${pathname})"
if [[ "${pathname}" != *.* ]]; then
# Note: how to add an element to an existing Bash Array
patharray=("${patharray[@]}" '\n' "${pathname}")
# echo -e ${patharray[@]}
fi
done
echo -e ${patharray[@]}
}
Run Code Online (Sandbox Code Playgroud)
我想将所有存储库路径保存到patharray数组中,但是我无法将pipeline其包含在包含locate和while命令的范围之外.
但是我可以在pipeline命令中获取数组,# echo -e ${patharray[@]}如果取消注释,注释命令运行良好,那么我该如何解决问题呢?
我已经尝试过该export命令,但似乎无法将其传递patharray给管道.
当我想输入命令时echo $bash_,然后按Tab键,自动补全不会发生。
但是当我输入命令echo $BASH_,然后按 时Tab,完成列表将输出如下:
$BASH_ALIASES $BASH_COMMAND $BASH_SOURCE
$BASH_ARGC $BASH_COMPLETION_COMPAT_DIR $BASH_SUBSHELL
$BASH_ARGV $BASH_LINENO $BASH_VERSINFO
$BASH_CMDS $BASH_REMATCH $BASH_VERSION
Run Code Online (Sandbox Code Playgroud)
我的.inputrc文件包含readlineignorecase选项,set completion-ignore-case on并且文件名完成不区分大小写是可以的。
所以,我希望variable name制表符补全可以忽略变量大小写。
我有一个变量Makefile:
JAVABIN = $(shell dirname $(which java))
Run Code Online (Sandbox Code Playgroud)
当我回显JAVA_HOME变量时Makefile,变量定义抱怨:
dirname: missing operand
Try 'dirname --help' for more information.
Run Code Online (Sandbox Code Playgroud)
当我引用时$(which java),JAVABIN是.,所以结果是错误的.我不明白make如何读取Makefile,也许是原因.非常感谢你.
根据C++ Primer一节,7.4.1类型名称是特殊的:
通常,内部作用域可以从外部作用域重新定义名称,即使该名称已在内部作用域中使用过.但是,在类中,如果成员使用外部作用域中的名称并且该名称是类型,则该类可能不会随后重新定义该名称.
因此,例如:
typedef double Money;
class Account {
public:
Money balance() { return bal; }
private:
typedef double Money;
Money bal;
};
int main() {
typedef double Money;
Money asset;
typedef double Money;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当你编译上面的例子时,它会抱怨:
a.cc:6:24: error: declaration of ‘typedef double Account::Money’ [-fpermissive]
typedef double Money;
^
a.cc:1:16: error: changes meaning of ‘Money’ from ‘typedef double Money’ [-fpermissive]
typedef double Money;
Run Code Online (Sandbox Code Playgroud)
那么为什么我们不能在类中重新定义类型名称,但我们可以在内部范围内吗?
我的编译器版本是g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609.
该部分还有一个注释:
虽然重新定义类型名称是错误的,但编译器不需要诊断此错误.即使程序出错,一些编译器也会悄悄地接受这样的代码.
如果我运行set如下:
C:\Users\vagrant>SET UNDEFINED=foo
C:\Users\vagrant>SET UNDEFINED
UNDEFINED=foo
C:\Users\vagrant>SET UNDEFINED
Environment variable UNDEFINED not defined
C:\Users\vagrant>SET UNDEFINED | more
UNDEFINED=foo
C:\Users\vagrant>SET UNDEFINED >nul
C:\Users\vagrant>SET UNDEFINED >nul
Environment variable UNDEFINED not defined
C:\Users\vagrant>SET UNDEFINED | more
Environment variable UNDEFINED not defined
C:\Users\vagrant>SET UNDEFINED >nul | more
Environment variable UNDEFINED not defined
C:\Users\vagrant>SET UNDEFINED >nul| more
C:\Users\vagrant>SET UNDEFINED 2>nul | more
C:\Users\vagrant>SET UNDEFINED 2>nul| more
UNDEFINED=foo
Run Code Online (Sandbox Code Playgroud)
注意,上面的第二个命令是SET UNDEFINED ,后面有两个空格。而且SET UNDEFINED >nul ,SET UNDEFINED >nul | more,SET UNDEFINED …
当object literal调用toString()方法时{}.toString()会导致语法错误,但是当数组文字调用toString()时就可以了.当我将对象文字分配给变量时,那么当它调用该toString()方法时就可以了.为什么?例如:
var o = {};
o.toString(); // OK
{}.toString();
// > Uncaught SyntaxError: Unexpected token .
[1, 2, 3].toString(); // OK
Run Code Online (Sandbox Code Playgroud)
谢谢!