小编use*_*088的帖子

如何声明引用并在以后初始化

我对C++很新,这是我的情况.我有一个参考MyOjbect,但确切的对象取决于条件.所以我想做这样的事情:

MyObject& ref; 
if([condition]) 
  ref = MyObject([something]) 
else 
  ref = MyObject([something else]);
Run Code Online (Sandbox Code Playgroud)

我现在不能这样做,因为编译器不允许我声明但不初始化引用.我能做些什么来实现我的目标?

c++ reference

52
推荐指数
7
解决办法
6万
查看次数

为什么在定义(而不是声明)静态数据成员时可能不会使用"'static'"?

我正在寻找在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)

编译器投诉:在定义(而不是声明)静态数据成员时,可能不会使用"静态"?

我想知道为什么?这背后的逻辑或推理是什么?

c++ static

16
推荐指数
1
解决办法
3823
查看次数

在emacs中使用Alt键作为Meta

不知何故,我正在使用的emacs不会将Alt视为Meta.它只使用ESC.如果我按下Alt + x,它会告诉我"AX"未定义.我试图找出如何将它映射到元但在网络上没有运气,因为在我搜索的大多数结果中,人们默认使用Alt作为Meta.我觉得这样的事情应该有效:

global-set-key Alt(?) 'meta

但我不确定如何在lisp代表Alt ..任何帮助?谢谢!

emacs

8
推荐指数
1
解决办法
2570
查看次数

如何让 GDB 继续运行直到程序进入另一个函数?

假设我在 A() 和 A() 调用 B()。我刚刚进入 A() 并且我希望程序运行到我进入 B() 为止。它不必是特定的函数 B()。我只希望我的程序在进入新函数时暂停。有没有办法做到这一点?

c c++ debugging gdb

5
推荐指数
1
解决办法
2194
查看次数

阴影参数C++的有趣情况(参数未在if块中隐藏)

我惊讶地发现,以下代码完全有效(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代码中是无效的(重复变量).

c++ gcc shadowing

5
推荐指数
1
解决办法
161
查看次数

带Web套接字的Akka HTTP内存泄漏

我有一个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)

scala akka akka-stream akka-http

5
推荐指数
1
解决办法
242
查看次数

inputrc文件无法加载

我只是想通了我们可以创建一个~/.inputrc文件来定义键盘映射.但我不知道如何加载它.我试图获取它,但我立即得到'set Syntax Error'.我~/.inputrc从这里复制了文件:http://www.linuxfromscratch.org/lfs/view/6.2/chapter07/inputrc.html

它提到它是使用Readline加载的.那是什么意思?

linux bash shell csh rc

4
推荐指数
1
解决办法
2211
查看次数

将命令行参数传递给shell脚本不起作用

我想编写一个脚本,根据我的输入将更改为不同的目录.这样的事情:

test.sh:
#!/bin/bash
ssh machine001 '(chdir ~/dev$1; pwd)'
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时./test.sh 2它仍然存在~/dev.似乎我的论点被忽略了.我在这做任何非常愚蠢的事吗?

bash shell scripting csh

2
推荐指数
1
解决办法
370
查看次数

C++对复制构造对象的引用

嘿,这是一个非常基本的问题,但我对此感到困惑.说我创建了一个对象

MyObject a.

它带有一个复制构造函数,所以我知道我可以这样做:

MyObject b(a); 但我可以这样做吗?

MyObject& b(a);

如果我这样做:

MyObject b = a;什么在b?道歉,如果这个问题太基础,不能打扰发布.

c++ constructor reference

2
推荐指数
1
解决办法
113
查看次数

C++无效指针错误

我从下面的代码中得到无效点错误我不明白为什么.我要做的就是从向量中删除堆上的一些字符串:

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创建了字符串的副本?

c++ pointers

2
推荐指数
1
解决办法
1万
查看次数

@tailrec为什么这个方法不能用'包含不在尾部位置的递归调用'进行编译?

  @tailrec
  private def loop[V](key: String): V = {
    key match {
      case _ => loop(key)
    }
  }
Run Code Online (Sandbox Code Playgroud)

此方法不编译并抱怨它"包含不在尾部位置的递归调用".有人可以向我解释发生了什么事吗?此错误消息对我没有意义.

recursion functional-programming scala

2
推荐指数
1
解决办法
264
查看次数

在if语句中指向变量的C++指针

以下代码的行为让我感到惊讶:

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不存在的地方,但这远远不足以解释正在发生的事情.

请帮我理解这段代码.谢谢!

c++ stack pointers

0
推荐指数
1
解决办法
160
查看次数

混淆了单级和嵌套之间的选择行为以理解

我是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看起来应该与第二个示例的行为完全相同,因为第二个示例基本上已经从列表中提取了选项以开始.

scala

0
推荐指数
1
解决办法
43
查看次数