小编mod*_*ler的帖子

如何使用0值的对象初始化指针

在"C++ Primer,5th ed",第2.4.4节中,整个部分解释了"constexpr".然后在书中给出了如下练习:

练习2.32:以下代码是否合法?如果没有,你怎么能让它合法?

int null = 0, *p = null;
Run Code Online (Sandbox Code Playgroud)

我知道修复它的一种快速方法是将其更改为*p = nullptr或NULL,或使用reinterpret_cast.但我认为这本书的目的是使用与constexpr相关的东西.所以我的问题是,如何正确解决上述问题?(我认为本书的目的是将p的值初始化为0,而不是null的地址.)

我在下面进行了试验但是在编译时都失败了:

试用1,添加constexpr:

constexpr int null = 0; 
int *p = null;
Run Code Online (Sandbox Code Playgroud)

试验2,加上const;

const int null = 0;
int *p = null;
Run Code Online (Sandbox Code Playgroud)

(我根据第4.11.2章其他隐式转换中的措辞进行了此试验:"常量整数值为0,文字nullptr可以转换为任何指针类型;")

先感谢您.(原因被问为一个新问题:这是一个新的问题,希望找到一个解决方案.还有另一个密切相关的问题,但没有给出建议的解决方案这个constexpr整数不是空指针常量吗?)

c++ constexpr c++11

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

Haskell报告中"varid","varsym"之间的语义差异是什么?

我读了Haskell的报告2010年有关于在部分2.4元逻辑表示的一些问题在这里:

  1. 在"varid"和"varsym"的助记符中,"var"是否意味着变量?
  2. 我的理解是"varid"是变量和函数的标识符,而"varsym"也是标识符,但对于运算符.这种理解是否正确?
  3. 如果1和2是正确的,它是否意味着运算符也是一种变量?(我很困惑,因为这可能不对.)

感谢任何建议.

haskell

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

保护再次自我分配

我正在阅读有关复制控制的内容,并在C++ Primer(第13.4章)一书中看到了以下示例.

我的问题是关于remove_from_Folders();内部复制赋值运算符:
如果我们首先这样做remove_from_Folders();,在自我赋值的情况下,它不folders.clear();清除rhs的数据成员并导致失败?

Message& Message::operator=(const Message &rhs)
{
 // handle self-assignment by removing pointers before inserting them
 remove_from_Folders();  // update existing Folders
 contents = rhs.contents; // copy message contents from rhs
 folders = rhs.folders;  // copy Folder pointers from rhs
 add_to_Folders(rhs);  // add this Message to those Folders
 return *this;
}

// remove this Message from the corresponding Folders
void Message::remove_from_Folders()
{
 for (auto f : folders) // for each pointer …
Run Code Online (Sandbox Code Playgroud)

c++ assignment-operator

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

在IntelliJ中,如何在搜索(所有位置)结果中排除\ target \ *。html文件?

我有一个IntelliJ java项目,我的源文件夹下有一些HTML文件模板。该项目已构建并输出到\ target \文件夹。HTML文件模板也将复制到目标文件夹。

我一直试图从“到处搜索”结果中排除目标文件夹中的HTML文件。

我已经在'Project Structure settings'中将\ target文件夹设置为'Excluded'

但这是行不通的:尽管以这种方式排除了target * .java和target * .js,但没有排除target * .html文件。我认为IntelliJ的“已排除”文件夹仅排除了将其视为源文件的这些文件,但html却没有。

有什么解决方法吗?我正在使用IntelliJ Idea 2016.1.3

java intellij-idea

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

如何(有效)找到两个方法之间的调用路径?

我有两个方法methodAand methodB,我想找到从methodAto 的调用路径methodB(如果有)。

Eclipse和IntelliJ具有查找调用层次结构的功能。但是,我需要一次扩展一层调用关系。当项目变得复杂时,就会非常耗时。(这就像手动执行 BFS。)

这在某些情况下很有用:例如,methodA可能是doPost()servlet 中的方法,而methodB是任意类中的方法。我被指派对 进行一些错误修复methodB,但我不熟悉整个项目,这是由一个大团队完成的。所以我想找到调用路径(methodA-> method1-> method2-> ... -> methodB)来快速了解整体控制流程,并检查其中使用的某些资源是否methodB是线程安全的。

java eclipse intellij-idea

5
推荐指数
0
解决办法
496
查看次数

如何在Emacs中的标记区域周围添加/删除括号?

我经常发现需要在Emacs中的标记区域周围添加/删除括号/括号。

目前,我通过以下方式手动添加:

  1. 将光标移动到预期区域的一端,键入打开指示符;
  2. 将光标移动到预期区域的另一端,键入结束符;

和清除以相反的方式。

但是,由于光标的移动,这看起来很麻烦并且容易出错。从安全的角度来看,如果我成对删除括号,则会感到更安全,因为它是原子操作

Emacs中是否有内置或手工制作的功能来针对标记区域执行此操作?

emacs

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

三个问题与评估的环境模型

我正在阅读SICP书籍这里有关命令式编程模型.我无法理解两点中的插图: 在此输入图像描述

  1. 从箭头square到"对"(两个圆圈):这个箭头是什么意思?虽然在本节中,箭头表示"封闭环境",但这个特定箭头似乎并未指向环境.(square环境是global env,而不是"对")
  2. 低于正确的理解:在过程定义的值中,其"代码文本"部分(左侧圆圈)没有对其中的符号的解释.它们只是"文字".只有在程序应用程序中,它们才能在应用程序的上下文/环境中获得意义.
  3. 如果2是正确的,为什么需要从该environment part对(右圆)到封闭环境的箭头?(因为没有任何意义来解释过程定义中过程代码中符号的含义.)

lisp variables evaluation function sicp

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

在 Spring MockMVC 测试中,如何将多个网页的访问链接起来?

我有一个需要登录的 Web 应用程序。登录成功后,会加载很多会话属性,后续其他网页的导航需要用到这些属性。

我正在使用 Spring 测试框架 4.12 和 MockMVC 测试这个 Web 应用程序。

如何在登录页面访问后链接第二个页面访问操作?就像是:

mockMvc.perform(post("/login").session(session).param("username", "Jack").param("password","Jack'sPassword"))
               .perform(get("/anotherPage")).andExpect(/*some session attribute are successfully loaded*/)
Run Code Online (Sandbox Code Playgroud)

java testing spring

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

如何将 emacs C++ 模式下的代码与“;”对齐 或者 ”,”?

作为一名测试工程师,我经常有一些像下面这样的意大利面条式代码:

  int *const cpe = &n; assert(42 == *cpe);
  int *const cpf = &cn; assert(42 == *cpf);
  int *const cpg = pcn; assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);
Run Code Online (Sandbox Code Playgroud)

为了美观,我想将它们在由“ ; ”定义的列中对齐,如下所示:

  int *const cpe = &n;   assert(42 == *cpe);
  int *const cpf = &cn;  assert(42 == *cpf);
  int *const cpg = pcn;  assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);
Run Code Online (Sandbox Code Playgroud)

emacs 中有没有办法做到这一点?(我知道,M-x align但它并没有像期望的那样做一个整洁的工作。)希望该方法也应该与“,”一起使用。

c++ emacs

3
推荐指数
1
解决办法
803
查看次数

如何决定是否需要在 DispatchQueue.main.async 中放置一个语句?

我正在尝试在 viewDidLoad 中获取子视图的绑定大小:(canvas.bounds

最初我没有使用DispatchQueue.main.async包装器,并且大小没有正确返回。所以通过实验,我将语句包装在主线程队列中。然后它起作用了。

我知道有一个指导方针说“UI相关操作需要放在主线程中”。但这如何转化为实际的编码经验法则:

  1. 如果我只是查询 UI 属性,例如获取边界大小,是否需要将其包装在主线程队列中?
  2. 如果我要更改 UI 属性,例如更改边界大小,是否需要将其包装在主线程队列中?(可能是的,我猜)

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    // stack views
    view.addSubview(photoView)
    view.addSubview(canvas)
    
    DispatchQueue.main.async {
        self.canvas.startPoint = CGPoint.zero
        self.canvas.endPoint = CGPoint(x: self.canvas.bounds.width / 2.0, y: self.canvas.bounds.height)
    
        self.canvas.setNeedsDisplay()
    }
    
    Run Code Online (Sandbox Code Playgroud)

实际上这引出了另一个我自然想问的问题:必须在 dispatch main 中包装代码看起来“不干净”。如果你必须包装它,是不是意味着“viewDidLoad”不是正确的生命周期使用?应该有一个更合适的生命周期,不需要调度主包装器?

uikit ios swift

3
推荐指数
1
解决办法
140
查看次数