我对C++很新,这是我的情况.我有一个参考MyOjbect,但确切的对象取决于条件.所以我想做这样的事情:
MyObject& ref;
if([condition])
ref = MyObject([something])
else
ref = MyObject([something else]);
Run Code Online (Sandbox Code Playgroud)
我现在不能这样做,因为编译器不允许我声明但不初始化引用.我能做些什么来实现我的目标?
我正在寻找在C++中初始化静态地图的方法,并找到了这段代码:
struct A{
static map<int,int> create_map()
{
map<int,int> m;
m[1] = 2;
m[3] = 4;
m[5] = 6;
return m;
}
static const map<int,int> myMap;
};
const map<int,int> A:: myMap = A::create_map();
Run Code Online (Sandbox Code Playgroud)
但是,如果我将最后一行更改为
const static map<int,int> A:: myMap = A::create_map();
Run Code Online (Sandbox Code Playgroud)
编译器投诉:在定义(而不是声明)静态数据成员时,可能不会使用"静态"?
我想知道为什么?这背后的逻辑或推理是什么?
不知何故,我正在使用的emacs不会将Alt视为Meta.它只使用ESC.如果我按下Alt + x,它会告诉我"AX"未定义.我试图找出如何将它映射到元但在网络上没有运气,因为在我搜索的大多数结果中,人们默认使用Alt作为Meta.我觉得这样的事情应该有效:
global-set-key Alt(?) 'meta
但我不确定如何在lisp代表Alt ..任何帮助?谢谢!
假设我在 A() 和 A() 调用 B()。我刚刚进入 A() 并且我希望程序运行到我进入 B() 为止。它不必是特定的函数 B()。我只希望我的程序在进入新函数时暂停。有没有办法做到这一点?
我惊讶地发现,以下代码完全有效(gcc 4.4.5):
int get_int(const int& i)
{
if(i == 0)
{
int i = 1;
return i;
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
我真的很惊讶.如果我必须接受它,那么我肯定可以说它有意义,因为新变量在它自己的块内,所以外面的其余代码仍然可以访问参数,所以参数不是真正的阴影.但是对我来说仍然没有意义,为什么我们不能使这个语法无效?我认为不允许这样做有什么好处,事实上,我只需要深入研究由此造成的错误.这是一个很长的函数,我创建了自己的变量而没有意识到它与参数具有相同的名称,并且稍后的某些代码行(相同的块)依赖于该参数变量,现在它正在使用我的版本我的日子里有一个小时.
我对编译器有很多表面知识,那么有人可以向我解释这种行为背后的全部故事吗?作为比较,在这样的Java代码中是无效的(重复变量).
我有一个Web服务器,它接受传入的Websocket连接,并在Scala中用akka http实现。但是,我一直在观察应用程序的内存使用量的单调增加。经过长时间的挖掘,我发现每个内部连接都会创建一些内部Akka对象,但是在客户端断开连接后它们不会被清除。特别是此类:akka.stream.impl.fusing.ActorGraphInterpreter。每个连接都会创建一个新的此类对象。我曾经jmap计算对象的数量,下面提供了命令。我不确定在这里是否做错了什么。任何建议将不胜感激。
我有一个超级简单的echo websocket服务器来复制此观察结果:
package samples
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.ws.{Message, TextMessage}
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Flow, Source}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.io.StdIn
object AkkaWsExample {
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
private val greeterWebSocketService = {
Flow[Message]
.collect {
case tm: TextMessage =>
println(s"Received $tm")
TextMessage(Source.single("Hello ") ++ tm.textStream)
}
}
def main(args: Array[String]): Unit = {
//#websocket-routing
val route =
path("greeter") {
get {
handleWebSocketMessages(greeterWebSocketService)
}
}
val bindingFuture …Run Code Online (Sandbox Code Playgroud) 我只是想通了我们可以创建一个~/.inputrc文件来定义键盘映射.但我不知道如何加载它.我试图获取它,但我立即得到'set Syntax Error'.我~/.inputrc从这里复制了文件:http://www.linuxfromscratch.org/lfs/view/6.2/chapter07/inputrc.html
它提到它是使用Readline加载的.那是什么意思?
我想编写一个脚本,根据我的输入将更改为不同的目录.这样的事情:
test.sh:
#!/bin/bash
ssh machine001 '(chdir ~/dev$1; pwd)'
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时./test.sh 2它仍然存在~/dev.似乎我的论点被忽略了.我在这做任何非常愚蠢的事吗?
嘿,这是一个非常基本的问题,但我对此感到困惑.说我创建了一个对象
MyObject a.
它带有一个复制构造函数,所以我知道我可以这样做:
MyObject b(a);
但我可以这样做吗?
MyObject& b(a);
如果我这样做:
MyObject b = a;什么在b?道歉,如果这个问题太基础,不能打扰发布.
我从下面的代码中得到无效点错误我不明白为什么.我要做的就是从向量中删除堆上的一些字符串:
void func() {
vector<string>* vec = new vector<string>;
vec->push_back(*(new string("1")));
vec->push_back(*(new string("2")));
for(vector<string>::iterator itr = vec->begin(); itr != vec->end(); ++itr)
{
string* ptr = &(*itr);
delete(ptr);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:是因为push_back创建了字符串的副本?
@tailrec
private def loop[V](key: String): V = {
key match {
case _ => loop(key)
}
}
Run Code Online (Sandbox Code Playgroud)
此方法不编译并抱怨它"包含不在尾部位置的递归调用".有人可以向我解释发生了什么事吗?此错误消息对我没有意义.
以下代码的行为让我感到惊讶:
map<string,long>* map_ptr;
if(true){
map<string, long> my_map;
my_map["a"] = 1;
my_map["b"] = 2;
my_map["c"] = 3;
map_ptr = &my_map;
}
//works ONLY IF this for loop comes before the next for loop
for(map<string, long>::iterator itr = map_ptr->begin(); itr != map_ptr->end(); ++itr)
cout << itr->second << endl;
// does not work prints random bits
for(map<string, long>::iterator itr = map_ptr->begin(); itr != map_ptr->end(); ++itr)
cout << itr->first << endl;
Run Code Online (Sandbox Code Playgroud)
我知道在if语句中创建的变量只包含其中的范围,但我认为声明指向它们的指针将起作用.我对这段代码的堆栈结构知之甚少,但我认为变量虽然超出了范围,但仍然存在于堆栈中,因此它们仍然存在.但似乎发生了比我所知更多的事情.让我感到惊讶的是,为什么第一个for循环打印出正确的东西,但只有在第二个for循环之前执行它.我想这与该类型有关,因为long它内置于string不存在的地方,但这远远不足以解释正在发生的事情.
请帮我理解这段代码.谢谢!
我是Scala的新手所以请耐心等待.我对以下行为感到困惑:
val l = List(Option(1))
for (i <- l; x <- i) yield x //Example 1: gives me List(1)
for(x <- Option(1)) yield x //Example 2: gives me Some(1)
Run Code Online (Sandbox Code Playgroud)
为什么理解的第二个1不是给我的?因为直观地说,这对我来说看起来更加一致,因为第一个示例中的第二个用于理解x <- i看起来应该与第二个示例的行为完全相同,因为第二个示例基本上已经从列表中提取了选项以开始.