小编psm*_*ars的帖子

`a`和`*a`之间有什么区别,其中`a`表示2D数组?

指针和数组彼此密切相关,因此,如果我们有一个二维数组

int a[3][4]={
             1,2,3,4,
             5,6,7,8,
             9,10,11,12};
Run Code Online (Sandbox Code Playgroud)

printf("%p\n", a);
Run Code Online (Sandbox Code Playgroud)

printf("%p\n", *a);
Run Code Online (Sandbox Code Playgroud)

打印相同的地址.我所理解的可能a是指向awhile 的基地址*a指向二维数组的第一个子数组a.

那么,这两者有什么区别?

c arrays syntax pointers multidimensional-array

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

返回const引用

我对返回const对temporaries的引用的函数声明感到有些困惑.

在以下代码中

#include <string>
#include <iostream>

using namespace std;

const string& foo() { 
    return string("foo"); 
}
string bar() { 
    return string("bar"); 
}

int main() {
    const string& f = foo();
    const string& b = bar();
    cout << b;

}
Run Code Online (Sandbox Code Playgroud)

方法foo和有bar什么区别?

为什么foo要给我warning: returning reference to local temporary object [-Wreturn-stack-address].是不是临时创建的副本const string& f = foo();

c++

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

在共享库中创建线程是不好的做法吗?

我正在创建一个共享库,其中一个类在其构造函数中创建一个线程,该类运行它直到调用析构函数.此类的所有方法都是线程安全的.像这样的东西:

class NetworkRPCConnection {
  std::thread t;
public:
  NetworkRPCConnection() : t([](){maintain_connection();}) {}
  ~NetworkRPCConnection(){close_connection(); t.join();}
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在共享库中创建线程是不好的做法吗?是否值得在API文档中提及,或者隐藏此实现细节是否更好?

c++ multithreading shared-libraries

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

与普遍参考混淆

我有这个代码:

void f2(int& lvalue)
{
  std::cout <<"lvalue\n";
}
void f2(int&& rvalue)
{
  std::cout << "rvalue\n";
}

template<typename T>
void f(T&& param)
{
  f2(param);
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话给f,我希望得到"左值" :

int v = 10;
f(v);
Run Code Online (Sandbox Code Playgroud)

并且如果我用以下方式调用f,则期望"rvalue" :

f(10);
Run Code Online (Sandbox Code Playgroud)

但是,我总是得到左值的情况.拜托,任何人都可以解释我错在哪里.

c++ c++11

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

Haskell - 采用相同映射的函数的映射

我目前正在Haskell中编写一种编程语言.这种编程语言类似于Factor,是一种基于堆栈的串联语言.然而,在走了很远之后,我碰到了一堵砖墙:我有一个类型的Data.Map:

Map.Map String ([YodaVal] -> YodaVal, Int) 但我需要存储在map中的函数将map作为参数,因此我可以在递归时保留环境,也可以允许递归函数定义,以及Haskell - > Yoda函数的递归定义.但是,该类型将如下所示:

type Env = Map.Map String ([YodaVal] -> Env -> [YodaVal] -> YodaVal, Int) 当然扩展到:

Map.Map String ([YodaVal] -> Map.Map String ... -> [YodaVal] -> YodaVal, Int)

recursion haskell types

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

Linux bash 两个命令的两个数字之和

我有两个命令都返回数字。例如:

cat `find -name \*.cd -print` | wc -l

cat `find -name \*.c -print` | wc -l
Run Code Online (Sandbox Code Playgroud)

假设第一个返回 10,另一个返回 5。

在不更改这些命令的情况下返回它们之和的命令会是什么样子?

我需要这样的东西:

cat `find -name \*.cd -print` | wc -l     +     cat `find -name \*.c -print` | wc -l
Run Code Online (Sandbox Code Playgroud)

在这种情况下它应该返回 15。

我怎样才能做到这一点?

linux bash

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

为什么在使用 -c+1 或 -c-1 时“tail”命令会返回整个文件内容?

作为问题本身,我不知道为什么会tail那样做。我有一个名为的文件myfile.txt,其内容是:

 firstline
 secondline
 thirdline
Run Code Online (Sandbox Code Playgroud)

所以当我使用:

 tail -c-1 myfile.txt
Run Code Online (Sandbox Code Playgroud)

或者

 tail -c+1 myfile.txt
Run Code Online (Sandbox Code Playgroud)

它输出:

 firstline
 secondline
 thirdline
Run Code Online (Sandbox Code Playgroud)

man tail

-c, --bytes = [+] NUM
输出最后 NUM 个字节;或使用 -c +NUM 以每个文件的字节 NUM 开头输出

linux bash

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

对于不同的平台(Linux,Windows等),多次编写C++编译器是真的吗?

据我所知,C++是ISO标准,因此它们提供了某种标准和要为即将发布的版本实现的功能列表.

是不是每个平台所有者都会为这些标准编写自己的实现?

或者是否有任何核心编译器代码实现一次,然后每个其他平台将编写包装器?

或者他们是从头开始编写自己的C++编译器?

c++ linux compiler-construction iso cross-compiling

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

在Node.js中将文件转换为UTF-8文件

我是JavaScript和Node.js的新手。因此,我有一个JSON文件,我想将此文件编码为UTF-8 JSON文件。Node.js怎么可能?

源JSON文件由另一个框架生成,并且可能包含BOM,但是我需要一个没有BOM的UTF-8 JSON文件来处理它。

javascript encoding json utf-8 node.js

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

使用 glsl 着色器的 Vulkan 教程

我复制粘贴了这个vulkan 教程中的代码,试图将其拆开并理解 Vulkan API。但是,我无法让它在没有错误的情况下运行。

如果我禁用验证,代码会按预期运行。但是,如果启用验证,我会得到:

validation layer: SPIR-V module not valid: Codesize must be a multiple of 4 but is 421. The Vulkan spec states: If pCode points to SPIR-V code, codeSize must be a multiple of 4 (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-01376
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,那就是 LunarSDK 验证检查之一。

所以我认为我必须要求一个 vulkan 扩展来处理 glsl 着色器而不是 Spir-v,但我不知道该怎么做,因为这是我第一次处理 API,我不知道我在寻找什么代码. 我尝试阅读教程和文档,但找不到如何修复它。

c++ runtime-error vulkan

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