小编Tho*_*ing的帖子

获取C++的AST?

我想获得一个用于C++的AST,然后我可以使用外部程序进行解析.哪些程序适合为C++生成AST?我不关心它实现的语言或输出格式(只要它易于解析).

我的总体目标是将C++单元测试台转换为相应的C#包装器测试台.

c++ abstract-syntax-tree

12
推荐指数
2
解决办法
6157
查看次数

特殊情况寿命分析

假设我有

void foo () {
    Bar bar = new Bar(); // bar is never referred to after this line
    // (1)
    doSomethingWithoutBar();
}
Run Code Online (Sandbox Code Playgroud)

在(1),对象bar是否指向有资格进行垃圾收集?或者也bar必须超出范围?如果GC.Collect被调用它会有所作为doSomethingWithoutBar吗?

这与知道Bar是否有(C#)析构函数或类似的类似内容有关.

c# garbage-collection

11
推荐指数
1
解决办法
190
查看次数

强制模式顺序

我正在Haskell写一个Magic The Gathering(MTG)游戏引擎.

对于那些不熟悉MTG的人来说,它是一种纸牌游戏,其中卡片最多可以有5种颜色:白色(W),蓝色(U),黑色(B),红色(R)和绿色(G).

{-# LANGUAGE ViewPatterns #-}
import Data.Set

data Color = W | U | B | R | G
    deriving (Show, Eq, Ord)

data Card = Card (Set Color) -- simplified Card type with only its colors

viewColors :: Card -> [Color]
viewColors (Card colors) = toList colors
Run Code Online (Sandbox Code Playgroud)

我想做的是像这样的颜色模式匹配:

foo :: Card -> String
foo (viewColors -> [W, B]) = "card is white and black"
foo _ = "whatever"
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但这里有一个问题:我可以在视图模式中错误地键入颜色顺序,如下所示:

bar :: Card -> String
bar (viewColors …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching

11
推荐指数
1
解决办法
457
查看次数

将负整数转换为较大的无符号整数

我遇到过执行以下转换的代码:

static_cast<unsigned long>(-1)

据我所知,C++标准定义了将有符号整数值转换为无符号整数类型时会发生什么(请参阅:如果我将一个负值分配给无符号变量,会发生什么?).

我在上面的代码中所关心的是源和目标类型可能是不同的大小,以及这是否会对结果产生影响.编译器会在转换之前扩大源值类型吗?它会转换为相同大小的无符号整数然后放大吗?或许还有其他什么?

用代码澄清,

int nInt = -1;
long nLong = -1; // assume sizeof(long) > sizeof(int)

unsigned long res1 = static_cast<unsigned long>(nInt)
unsigned long res2 = static_cast<unsigned long>(nLong);

assert(res1 == res2); // ???
Run Code Online (Sandbox Code Playgroud)

基本上,我应该担心像编写代码一样

static_cast<unsigned long>(-1L)
Run Code Online (Sandbox Code Playgroud)

过度

static_cast<unsigned long>(-1)
Run Code Online (Sandbox Code Playgroud)

c++ size casting

11
推荐指数
2
解决办法
8437
查看次数

Code golf:重复文字的"颜色突出显示"

(感谢下面的greg0ire帮助了解关键概念)

挑战:构建一个程序,找到所有子串并用颜色属性"标记"它们(用XML有效地突出显示它们).

规则:

  1. 这应该只对长度为2或更长的子串进行.
  2. 子串只是连续字符串,可能包括非字母字符.请注意,空格和其他标点符号不会分隔子字符串.
  3. 字符大小写不容忽视.
  4. 应该通过在XML中标记子字符串来完成"突出显示".您的标记应该是一个形式<TAG#>theSubstring</TAG#>,其中#是该子字符串和相同子字符串唯一的正数.
  5. 算法的优先级是找到最长的子字符串,而不是它在文本中匹配的次数.

注意:以下示例中显示的标记顺序并不重要.OP仅用于清晰度.


输入示例:

LoremIpsumissimplydummytextoftheprintingandtypesettingindustry.LoremIpsumhasbeentheindustry'sstandarddummytexteversincethe1500s,whenanunknownprintertookagalleyoftypeandscrambledittomakeatypespecimenbook.
Run Code Online (Sandbox Code Playgroud)

部分正确的输出(OP在这个例子中可能没有完全完全替换)

<TAG1>LoremIpsum</TAG1>issimply<TAG2>dummytext</TAG2>of<TAG5>the</TAG5><TAG3>print</TAG3>ingand<TAG4>type</TAG4>setting<TAG6>industry</TAG6>.<TAG1>LoremIpsum</TAG1>hasbeen<TAG5>the</TAG5><TAG6>industry</TAG6>'sstandard<TAG2>dummytext</TAG2>eversince<TAG5>the</TAG5>1500s,whenanunknown<TAG3>print</TAG3>ertookagalleyof<TAG4>type</TAG4>andscrambledittomakea<TAG4>type</TAG4>specimenbook.
Run Code Online (Sandbox Code Playgroud)

您的代码应该能够处理边缘情况,例如:

示例输入2:

hello!TAG!</hello.TAG.</
Run Code Online (Sandbox Code Playgroud)

示例输出2:

<TAG1>hello</TAG1>!<TAG2>TAG</TAG2>!<TAG3></</TAG3><TAG1>hello</TAG1>.<TAG2>TAG</TAG2>.<TAG3></</TAG3>
Run Code Online (Sandbox Code Playgroud)

获胜者,冠军:

  • 最优雅的解决方案获胜(由其他评论评判,赞成)
  • 使用shell脚本的解决方案的奖励积分/考虑因素

轻微澄清:

  • 输入可以是硬编码或从文件中读取
  • 标准仍然是"优雅",虽然它有点模糊,但它也包含简单的字符/行数.其他人和/或赞成者的评论也表明了SO社区如何看待这一挑战

language-agnostic string code-golf rosetta-stone

10
推荐指数
1
解决办法
810
查看次数

C++ sizeof包装类

假设我有一个不从任何东西继承的类A,没有虚方法,并且只有一个类型为T的变量.C++是否保证sizeof(A) == sizeof(T)

编辑:

如果T是复合类型,它会有所作为吗?

c++ class sizeof

9
推荐指数
1
解决办法
387
查看次数

究竟什么引用c ++中的计数意味着什么?

参考计数究竟是什么?特别是,C++的用途是什么?如果我们不处理它们会遇到什么问题?所有语言都需要引用计数吗?

c++ constructor copy-constructor

9
推荐指数
2
解决办法
3544
查看次数

用户可以删除给定域中的cookie吗?

Greasemonkey可以删除给定域中的cookie吗?如果是这样,怎么样?

javascript cookies firefox greasemonkey userscripts

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

如何编写没有Java副作用的程序?

作为一名长期的Java程序员,近年来Haskell成瘾者,我现在正在学习Scala.我的问题是:

如何编写没有Java副作用的程序?

即我如何手动完成Scala为我做的事情?

来自Odersky的Scala书经常用OO术语解释功能概念(例如val = final,if = ternary op.).

是否有一个可访问的指南如何编写没有Java的副作用(尽可能少)?我想可以通过普通的旧java和一些规则来获得许多已知的好处(例如,不可修改的集合,最终值,不修改对象/应用程序状态的刚性方法).

java functional-programming scala

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

强制编译时constexpr

在C++ 11中,我们得到constexpr:

constexpr int foo (int x) {
    return x + 1;
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用编译时错误foo的动态值进行调用x?也就是说,我想创建一个foo只能传递constexpr参数的东西.

c++ constexpr c++11

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