小编ajo*_*eps的帖子

如何在 VSCode C++ 扩展中启用 C++17 支持

我一直在 std::string_view 上出现错误曲线,但我能够构建得很好。有没有办法告诉智能感知或 C++ linter 使用 C++17?

我得到的具体错误是:

namespace "std" has no member "string_view"
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-code c++17 vscode-settings

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

Fedora 33 git pull 或 clone 不再工作和/或不再识别 ssh 密钥

我最近设置了 Fedora 33 并且正在迁移我的文件。我复制了我的 ssh 密钥,发现我无法再从 bitbucket git repos 中拉出我能够从旧笔记本电脑上拉出的。ssh密钥完全一样,公钥已经在bitbucket账户上了。此外,权限设置为chmod 600. 我仍然无法从回购中拉出。

git ssh fedora

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

为什么 string.Builder Reset() 不保留底层缓冲区?

// Reset resets the Builder to be empty.
func (b *Builder) Reset() {
    b.addr = nil
    b.buf = nil
}
Run Code Online (Sandbox Code Playgroud)

代码片段来自go strings.Builder中的源代码。缓冲区设置nil为而不是b.buf[:0]nil将其设置为而不保留容量的原因是什么?

编辑: 我可以看到它Reset()可以用于 GC 底层缓冲区并允许重新使用 Builder 结构,但初始化该结构似乎是边际成本,因为它只是两个指针,而底层数组可能是更大,并且可以重复使用。我觉得应该有一个Clear()函数可以保留底层缓冲区的容量,但将其长度减少到 0,而且实现起来很简单。这让我相信没有这样做是有原因的,我很好奇这个原因是什么。

string stringbuilder go

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

为什么 -O3 向下转换/更改对变量的 const 引用的值?

#include <iostream>
#include <stdint.h>

class Test {
  public:
  Test(const int64_t & val) : val_(val) {
    std::cout << "initialized: " << val_ << std::endl;
  }
  void print() {std::cout << "reference val: " << val_ << std::endl;}

  private:
  const int64_t & val_;
};


int main() {
  long long int input_val= 1628020800000000000L;
  auto t = Test(input_val);
  std::cout << "input_val: " << input_val << std::endl; 
  t.print();
}
Run Code Online (Sandbox Code Playgroud)

如果您在没有优化构建的情况下构建,则会得到以下结果:

g++ main.cpp -std=c++17
initialized: 1628020800000000000
input_val: 1628020800000000000
reference val: 1628020800000000000
Run Code Online (Sandbox Code Playgroud)

如果您使用优化构建(例如 -O3)构建,您将获得以下信息:

g++ main.cpp -std=c++17 -O3 …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

6
推荐指数
1
解决办法
119
查看次数

如何散列 std::string_view ?

我正在尝试定义我自己的散列函数,std::unordered_map并且我想散列一个结构中的一个字段,该字段应该是键。下面的代码是我所拥有的简化版本:

struct TestStruct {
    char a[64];
    char b[64];
}

struct my_eq {
    bool operator()(const TestStruct& test_1, const TestStruct& test_2) const {
        return !strcmp(test_1.a, test_2.a) && !strcmp(test_1.b, test_2.b);
    }
};

struct my_hash {
    unsigned long operator()(const TestStruct& test) const {
        return std::hash<std::string_view>(std::string_view(test.a));
    }
};
std::unordered_map<TestStruct, int, my_hash,my_eq> map;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

no matching function for call to ‘std::hash<std::basic_string_view<char> >::hash(std::string_view&)
Run Code Online (Sandbox Code Playgroud)

根据cppreference上std::hash的hash函数应该支持std::string_view. 我觉得我错过了一些简单的东西,但我无法弄清楚。

c++ hash string-view c++17

2
推荐指数
1
解决办法
1569
查看次数

C++ std :: hash实现总是确定性的吗?

我知道这std::hash<T>是依赖于实现的,但它们应该是确定性的吗?

我知道如果我std::hash<T>在同一个进程中多次运行函数多次,我会得到相同的输出.但是,如果我重新启动该过程,我会获得相同的值吗?是否有用于std :: hash的种子?它取决于编译器版本还是其他因素?

是否可以保证输入时无论过程运行何时启动,机器还是编译器版本,X我都会得到输出Y

c++ hash std

2
推荐指数
1
解决办法
594
查看次数