小编Sum*_*uma的帖子

在恰当的时间点将调试器附加到VC++中的过程的最佳方法是什么?

在调试时,有时您需要附加已经运行的进程,而不是仅在调试器中启动应用程序.

我自己常常放入Sleep()或MessageBox调用,以便更容易连接调试器.我担心其中一些可能最终会被提交给源代码控制.

在延迟足够时间的同时避免这种情况的最佳方法是什么,以便可以将调试器连接到正在运行的进程?

用#ifdef _DEBUG一种方式保护睡眠或消息框,但我想知道是否有更好的方法.

睡眠时,您还有一个问题,即您可能无法及时附着.使用MessageBox,您可能遇到远程调试或调试没有可见GUI的进程的问题(示例在Vista上作为服务运行)

c++ debugging debugbreak visual-c++

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

声明但不定义内部结构/类 - 合法C++与否?

以下代码是否合法C++?

class Foo
{
  class Bar;

  void HaveADrink(Bar &bar);
  void PayForDrinks(Bar &bar);

  public:
  void VisitABar(int drinks);
};

class Foo::Bar
{
  public:
  int countDrinks;
};

void Foo::HaveADrink(Bar &bar)
{
  bar.countDrinks++;
}
void Foo::PayForDrinks(Bar &bar)
{
  bar.countDrinks = 0;
}
void Foo::VisitABar(int drinks)
{
  Bar bar;
  for (int i=0; i<drinks; i++) HaveADrink(bar);
  PayForDrinks(bar);
}
Run Code Online (Sandbox Code Playgroud)

Visual C++和GCC都接受它,但是代码对我来说似乎有些奇怪,我不愿意让它被未来的编译器拒绝.

尽管如此,这种模式似乎对减少编译时依赖性很有用 - 我经常使用它来声明用于传递一些"上下文"(一堆变量)的结构,这些结构在一些函数之间共享,这些函数都位于同一个cpp中文件,这样我就不必将"上下文"定义引入公共接口.

c++ definition inner-classes forward-declaration

8
推荐指数
2
解决办法
2962
查看次数

为什么scala.language.implicitConversions不是最后一次导入时发出警告?

在我的Scala代码中,我有一些隐式转换,我有必要的导入存在:

import scala.language.implicitConversions
Run Code Online (Sandbox Code Playgroud)

但是,有时当在此之后再进行另一次导入时,我会收到警告,好像导入根本不存在:

警告:(112,18)隐式转换方法pair2Dimension应该通过使隐式值scala.language.implicitConversions可见来启用.

build.sbt:

name := "ImplicitSBT"

version := "1.0"

scalaVersion := "2.11.5"

scalacOptions ++= Seq("-deprecation","-feature")

libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "1.0.1"
Run Code Online (Sandbox Code Playgroud)

Main.scala:

import scala.language.implicitConversions
import scala.swing.{Action, _}

object Main extends App {

  implicit def pair2Dimension(pair: (Int, Int)): Dimension = new Dimension(pair._1, pair._2)

  val dim : Dimension = (0,0)

  println(dim)


}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如何import scala.swing.{Action, _}隐藏implicitConversions导入?

import warnings scala implicit-conversion

8
推荐指数
2
解决办法
5499
查看次数

使用movsd制作编译器复制字符

我想在时间关键函数中复制相对较短的内存序列(小于1 KB,通常为2-200字节).CPU端的最佳代码似乎是rep movsd.但是我不知道怎么能让我的编译器生成这段代码.我希望(我依旧记得这么看)使用memcpy会使用编译器内置的内在函数来做到这一点,但基于反汇编和调试,似乎编译器正在使用调用memcpy/memmove库实现.我也希望编译器可能足够聪明,可以识别以下循环并单独使用rep movsd,但似乎没有.

char *dst;
const char *src;
// ...
for (int r=size; --r>=0; ) *dst++ = *src++;
Run Code Online (Sandbox Code Playgroud)

有没有办法让Visual Studio编译器生成rep movsd序列而不是使用内联汇编?

c++ performance visual-studio-2005 memcpy intrinsics

7
推荐指数
2
解决办法
2552
查看次数

图像作为源代码文档/注释的一部分?

我的问题类似于将图像添加到源代码中,但我的环境是Visual C++.有没有办法如何添加图像作为注释的一部分,并让IDE显示它们(内联,或通过点击它们或对它们执行某些操作)?

我到目前为止所要做的是要么使用其URL提供放置在SVN中的外部.PNG或.SVG文件的URL,要么创建一个ASCII艺术,但在GUI和富有的时代我感到很奇怪各地的文件仍然限于此.如果没有更好的解决方案,是否至少有一些插件可以使这更加简化(例如,通过为我创建SVN文档并在评论中放置链接,或者通过帮助我在ASCII艺术绘图中)?

c++ documentation visual-studio-2010 visual-studio visual-c++

7
推荐指数
1
解决办法
1598
查看次数

比较两个列表中的项目

我有两个清单: List(1,1,1) , List(1,0,1)

我想得到以下内容:

  1. 每个元素的计数,包含第一个列表中的1和相应列表中相同位置的0,反之亦然.在上面的例子中,这将是1,0,因为第一个列表在中间位置包含1,而第二个列表在相同位置(中间)包含0.

  2. 每个元素的计数,其中1在第一个列表中,1也在第二个列表中.在上面的例子中,这是两个,因为每个相应的列表中有两个1.我可以使用类List的intersect方法得到它.

我只是在寻找上述第1点的答案.我可以使用迭代方法来计算项目,但是有更实用的方法吗?这是整个代码:

class Similarity {
  def getSimilarity(number1: List[Int], number2: List[Int]) = {
    val num: List[Int] = number1.intersect(number2)
    println("P is " + num.length)
  }
}

object HelloWorld {
  def main(args: Array[String]) {
    val s = new Similarity
    s.getSimilarity(List(1, 1, 1), List(1, 0, 1))
  }
}
Run Code Online (Sandbox Code Playgroud)

scala

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

如何测试Float或Double是无限还是NaN?

在Java中,有一个API可以测试数字是无穷大还是NaN.

我在Scala中找不到这样的东西,并且调用Java函数似乎我需要设置值或调用java.lang.Double静态方法:

Double.box(x).isNaN

java.lang.Double.isNaN(x)
Run Code Online (Sandbox Code Playgroud)

难道没有什么比Scala更"原生"来测试无限/ NaN-ness了吗?

floating-point double scala

7
推荐指数
1
解决办法
5286
查看次数

IntelliJ:即使存在源,也会显示反编译的类反汇编

当无法找到源时,IntelliJ可以显示和调试反编译的类.有没有办法强制调试器使用反汇编代替源代码,即使找到源代码,除了删除源代码?

这在源错误(与类不匹配)的情况下非常有用.

java debugging jvm intellij-idea disassembly

7
推荐指数
1
解决办法
2672
查看次数

SBT 依赖项中的“容器”和“提供”有什么区别?

在阅读build.sbt许多 Web 应用程序时,经常可以看到标记为 的依赖项"provided",例如参见sbt-assembly 文档:

“org.apache.spark”%%“spark-core”%“0.8.0-incubating”%“提供”

我在 SBT 文档中找不到任何提及,但是Maven 文档说明了以下内容:

  • 假如

这很像编译,但表明您希望 JDK 或容器在运行时提供依赖项

然而,有时我也看到"container"了同样的位置,比如在这个 build.sbt 中。这是同一件事吗?

val tomcatVersion = "7.0.53"

libraryDependencies ++= Seq(
  "org.apache.tomcat.embed" % "tomcat-embed-core"         % tomcatVersion % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-logging-juli" % tomcatVersion % "container",
  "org.apache.tomcat.embed" % "tomcat-embed-jasper"       % tomcatVersion % "container",
  "org.apache.tomcat" % "tomcat-catalina" % tomcatVersion % "provided",
  "org.apache.tomcat" % "tomcat-coyote"   % tomcatVersion % "provided"
)
Run Code Online (Sandbox Code Playgroud)

scala sbt xsbt-web-plugin

7
推荐指数
1
解决办法
1685
查看次数

从伴侣导入的类不可用作构造函数参数的默认值

考虑以下代码:

object Main extends App {
  object Project {
    case class Config(rules: Seq[String] = Seq.empty)
  }

  import Project._

  //case class Project(root: String, config: Config) // compiles fine

  //case class Project(root: String, config: Project.Config = Project.Config()) // compiles fine

  case class Project(root: String, config: Config = Config()) // error: not found: type Config

}
Run Code Online (Sandbox Code Playgroud)

为什么最后一个版本没有编译(与之相同Config = Config.apply())?

scala companion-object

7
推荐指数
1
解决办法
110
查看次数