说我打开了一个终端,通过那个终端,我已经cd去了一个目录.通过另一个终端,我删除该目录并从相同的备份恢复它.当我尝试vim从第一个终端的文件,在同一目录中,为什么我收到有关陈旧文件句柄的错误?这是什么意思?(另一方面,我发现可以绕过这个问题cd $(pwd).)
分配变量var=foo和使用let 之间的区别是什么let var=foo?或者像var=${var}bar和let var+=bar?每种方法的优点和缺点是什么?
我目前正在使用" 自学C++ 21天,第二版"一书来学习C++编码,以及Microsoft Visual C++ 2010 Express.在第1章的最后,有一个关于编写和编译以下代码的小练习:
#include <iostream>
int main ()
{
cout << "Hello World!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
很简单吧?但令我惊讶的是,由于此错误,代码无法编译:
错误C2065:'cout':未声明的标识符
我开始淘网,并很快找到了一些解决方案在这里.原来我必须添加
using namespace std;到我的代码!
但是书中没有提到命名空间,所以我认为这本书已经过时了.(它使用#include <iostream.h>预处理器指令!)一些网络研究后,我发现了很多关于命名空间的信息,namespace std与一些历史背景以及<iostream.h>和<iostream>,以及新信息的所有这种流动是相当混乱给我.(更不用说关于医疗性病的所有不必要的Google结果......)
所以这里有一些我到目前为止的问题:
iostream图书馆,为什么namespace需要找到cout?是否有另一个cout可能导致名称冲突的地方?如果有人可以为此提供图表,那就太好了.作为奖励,一些历史背景:
iostream.h它改变之前到底是什么iostream?
没有namespace起到这种变化的一部分?
我想知道是否存在可以绘制Prolog程序的逐步搜索树的工具?谢谢.
这是一个例子:
class A
{
List l = new List ();
list.insert("x");
}
class List
{
...
public void insert ()
{
/*insertion occurs*/
}
...
}
Run Code Online (Sandbox Code Playgroud)
是否有可能将insert()方法保持为public,但是只限制对A类的访问,以便只有从A调用时才能访问其他类?
由于某些奇怪的原因std::this_thread::sleep_for,我在 WSL Ubuntu 上不起作用。它只是拒绝在指定的时间内睡觉。我想要第二个意见,以确定我是否做错了什么,或者我是否只是在 GNU C++std::实现中遇到了错误。
USER@ABC-WORKSTATION /tmp
$ cat sleep_test.cpp
#include <chrono>
#include <thread>
#include <iostream>
int main()
{
auto start = std::chrono::system_clock::now();
std::time_t start_time = std::chrono::system_clock::to_time_t(start);
std::cout << "Start: " << std::ctime(&start_time) << std::endl;
std::cout << "Sleep... " << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(10000));
auto end = std::chrono::system_clock::now();
std::time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout << "End: " << std::ctime(&end_time) << std::endl;
}
USER@ABC-WORKSTATION /tmp
$ g++ --version
g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc. …Run Code Online (Sandbox Code Playgroud) 我目前正在用C++编写素数生成器.我先制作了一个单线程版本,后来又制作了一个多线程版本.
我发现如果我的程序生成的值小于100'000,则单线程版本比多线程版本更快.显然我做错了什么.
我的代码如下:
#include <iostream>
#include <fstream>
#include <set>
#include <string>
#include <thread>
#include <mutex>
#include <shared_mutex>
using namespace std;
set<unsigned long long> primeContainer;
shared_mutex m;
void checkPrime(const unsigned long long p)
{
if (p % 3 == 0)
return;
bool isPrime = true;
for (set<unsigned long long>::const_iterator it = primeContainer.cbegin(); it != primeContainer.cend(); ++it)
{
if (p % *it == 0)
{
isPrime = false;
break;
}
if (*it * *it > p) // check only up …Run Code Online (Sandbox Code Playgroud) 我有一个功能ll,目前扩展到这个:
function ll ()
{
ls -lh --color "$@" | grep "^d";
ls -lh --color "$@" | grep "^-" | grep -v "~";
ls -lh --color "$@" | grep "^l"
}
Run Code Online (Sandbox Code Playgroud)
这样做是将列出的文件夹排序为首先显示目录,然后是文件,然后是链接.但是,我发现这种方法会降低ls命令的功能,例如,如果我尝试调用ll /bin /tmp,我将从两个文件夹中获取混合文件.
是否有一般的经验法则来传递命令别名/函数,以便不减少这些命令的完整功能?如果没有,我如何修复我的ll命令以便保留排序,但是完整的功能ls不会丢失?
请注意,我目前在我的系统(版本5.97)上有bash版本3.2.25(1) - release,因此--show-directories-first我无法使用标记.
编辑:
这是我最终使用的功能,我稍微修改了它,以便在ll没有任何args的情况下工作:
function ll () {
if [ $# -eq 0 ]; then set -- .; fi
for d; do
ls -lh --color "$d"|awk '$1~/^d/{i=0} $1~/^l/{i=1} $1~/^-/{i=2} NF>2{print …Run Code Online (Sandbox Code Playgroud) 请注意,我在AWK中需要这个答案.
如何从某些awk变量中删除所有小写字符?我试过调用gsub:
gsub(/[a-z]+/,"",varName);
不幸的是,这删除了整个字符串,好像awk无法区分大小写的区别.我可以使用一些我不知道的正则表达式吗?
编辑:确认,awk没有看到小写和大写字符之间的区别.
示例1(这里将使用字母f来更好地理解结果):
varName="CHRFProtocol";
gsub(/[a-z]/,"f",varName);
Run Code Online (Sandbox Code Playgroud)
结果: ffffffffffff
示例2(同样,这里将使用字母f来更好地理解结果):
varName="CHRFProtocol";
gsub(/[A-Z]/,"f",varName);
Run Code Online (Sandbox Code Playgroud)
结果: ffffffffffff
这合法吗?在做什么?
我想在我的大学帐户中将bash设置为我的默认shell.
然而,传统的chsh方法在这里不起作用,因为大学的技术人员已经将其作为一个创业公司.但是,我可以通过bash从我的终端呼叫来调用bash .所以,我开发了一个小的hack,它允许我当前的shell csh通过修改我的~/.cshrc文件来自动启动bash,以便它从中调用bash.问题是,我希望以这样的方式设置它,当我退出我的bash会话时,我希望它也关闭它的父csh会话.我怎样才能做到这一点?
==编辑==
提醒:由于ajk警告过使用csh运行的脚本,我发现登录序列在该shell上精确完成的难点.我现在无法再登录我的机器了.我将不得不联系我的大学技术人员关于删除rc文件.我怀疑会让他们开心.:\
所以,请注意.