小编Sco*_*ter的帖子

115
推荐指数
5
解决办法
8万
查看次数

Kotlin:如何将函数作为参数传递给另一个?

给定函数foo:

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}
Run Code Online (Sandbox Code Playgroud)

我们可以做的:

foo("a message", { println("this is a message: $it") } )
//or 
foo("a message")  { println("this is a message: $it") }
Run Code Online (Sandbox Code Playgroud)

现在,假设我们有以下功能:

fun buz(m: String) {
   println("another message: $m")
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将"buz"作为参数传递给"foo"?就像是:

foo("a message", buz)
Run Code Online (Sandbox Code Playgroud)

kotlin

112
推荐指数
5
解决办法
5万
查看次数

Gcc错误:gcc:尝试执行'cc1'时出错:execvp:没有这样的文件或目录

我已成功在Linux Mint 12上使用gcc.现在我收到错误.我最近做了一些.so构建并安装了很久以前的Clang,但是自从这两个事件都成功编译后,所以不确定发生了什么变化.我使用GUI软件管理器删除然后再次安装gcc,但结果是一样的:

~/code/c/ut: which gcc                                                                                                     
/usr/bin/gcc

~/code/c/ut: gcc -std=c99 -Wall -Wextra -g -c object.c                                                                      
gcc: error trying to exec 'cc1': execvp: No such file or directory
Run Code Online (Sandbox Code Playgroud)

gcc

86
推荐指数
9
解决办法
21万
查看次数

在c ++ 0x中删除nullptr仍然是安全的吗?

c++03它是很清楚,删除一个空指针没有任何效果.实际上,它明确指出§5.3.5/2:

在任一替代方案中,如果delete的操作数的值是空指针,则操作无效.

然而,在目前的草案对于c++0x这句话似乎缺少.在草稿的其余部分,我只能找到句子,说明如果delete-expression的操作数不是空指针常量会发生什么.是否删除仍然定义的空指针c++0x,如果是,在哪里?

笔记:

有大量的间接证据表明它仍然有明确的定义.

首先,有两句话§5.3.5/2说明

在第一个替代(删除对象)中,delete的操作数的值可以是空指针值,...

在第二个替代(删除数组)中,delete的操作数的值可以是空指针值或...

这些说操作数被允许为空,但是它们自己实际上并没有定义如果是的话会发生什么.

其次,改变意义delete 0是一个重大的突破性变化,标准委员会不太可能做出这种特殊的改变.此外,没有提到这是c++0x草案兼容性附件(附件C)的重大变化.但是,附件C是一个信息性部分,因此对标准没有任何解释.

另一方面,删除空指针要求无效的事实意味着额外的运行时检查.在很多代码中,操作数永远不能为空,因此这个运行时检查与零开销原则相冲突.也许委员会刚刚决定改变行为,使标准c ++更符合语言的既定设计目标.

c++ null language-lawyer delete-operator

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

为什么clang ++警告"建议围绕子对象初始化[-Wmissing-braces]"?

我有这个代码:

#include <array>

int main(int, char **argv)
{
   std::array<int, 3> a = {1,2,3};
}
Run Code Online (Sandbox Code Playgroud)

这编译很好(-std = c ++ 11),但如果你包含-Wall它会发出我不明白的警告:

clang_pp_error.cpp:5:28: warning: suggest braces around initialization of subobject [-Wmissing-braces]
   std::array<int, 3> a = {1,2,3};
                           ^~~~~
                           {    }
Run Code Online (Sandbox Code Playgroud)

clang++

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

删除[]一个对象数组

我已分配和对象数组

Objects *array = new Objects[N];
Run Code Online (Sandbox Code Playgroud)

我该如何删除这个数组?只是

delete[] array;
Run Code Online (Sandbox Code Playgroud)

或者迭代数组的元素?

for(int i=0;i<N;i++)
    delete array[i];
delete[];
Run Code Online (Sandbox Code Playgroud)

谢谢

更新:

我改变了循环体

delete &array[i];
Run Code Online (Sandbox Code Playgroud)

强制代码编译.

c++ arrays new-operator delete-operator

31
推荐指数
5
解决办法
9万
查看次数

如何在Code :: Blocks 12.11中指定调试器程序?

我试图通过我的程序,我从Code :: Blocks获得以下消息

Selecting target: 
Debug
ERROR: You need to specify a debugger program in the debuggers's settings.
(For MinGW compilers, it's 'gdb.exe' (without the quotes))
(For MSVC compilers, it's 'cdb.exe' (without the quotes))
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法弄清楚我在哪里输入gdb.exe.

codeblocks

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

如何在mingw-w64 gcc 7.1中无需警告地打印size_t?

我在nuwen.net上使用minGW的mingw-w64(x64)分支.这是来自7.1版本的gcc:

gcc --version
gcc (GCC) 7.1.0
Run Code Online (Sandbox Code Playgroud)

我正在编译这个程序:

#include <stdio.h>

int main(void)
{
    size_t a = 100;
    printf("a=%lu\n",a);
    printf("a=%llu\n",a);
    printf("a=%zu\n",a);
    printf("a=%I64u\n",a);
}
Run Code Online (Sandbox Code Playgroud)

有警告和c11标准:

gcc -Wall -Wextra -Wpedantic -std=c11 test_size_t.c
Run Code Online (Sandbox Code Playgroud)

我收到这些警告:

   test_size_t.c: In function 'main':
    test_size_t.c:6:14: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka long long unsigned int}' [-Wformat=]
      printf("a=%lu\n",a);
                ~~^
                %I64u
    test_size_t.c:6:14: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka long long unsigned …
Run Code Online (Sandbox Code Playgroud)

c printf size-t

16
推荐指数
2
解决办法
3531
查看次数

哪里是c ++ filt源代码?

有谁知道c ++ filt源代码的链接.我想在我的代码中调用c ++ filt作为库.

c++

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

在getClass()文档中"删除它所称的表达式的静态类型"是什么意思?

Object 的"public final Class <?> getClass()"方法的文档说:

实际的结果类型是Class <?extends | X |> where | X | 是调用getClass的表达式的静态类型的擦除.例如,此代码片段中不需要强制转换:

我不明白这个解释,特别是关于什么| X | 据说 - "擦除了调用getClass的表达式的静态类型".

什么形式的符号是| X | ?或者,也许,其他地方| X | 是否使用了表示法?

java

10
推荐指数
2
解决办法
569
查看次数