小编Bar*_*kPL的帖子

结构化绑定是否与std :: vector一起使用?

是否可以使用带向量的结构化绑定?

例如

std::vector<int> vec{1, 2, 3};
auto [a, b, c] = vec;
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面的代码不起作用(在GCC下),但也许有一种不同的方式(结构化绑定)允许将向量的前三个值分配给三个变量.

c++ vector pattern-matching c++17 structured-bindings

24
推荐指数
3
解决办法
2190
查看次数

什么是默认的 target_link_libraries 隐私设置?

我想知道什么是默认target_link_libraries隐私。

我在 CMake 中添加了一行:

target_link_libraries(myTarget
        libraryA
        libraryB
        )
Run Code Online (Sandbox Code Playgroud)

但我不知道是不是PRIVATEPUBLIC或者可能INTERFACE。我检查文档,但我没有看到我的问题的答案:(

编辑:

我发现某事

最后要注意的是,如果您调用 target_link_libraries() 并且没有指定任何 PRIVATE、PUBLIC 或 INTERFACE,您可能会认为它将被视为 PUBLIC。然而,情况实际上比这更复杂。它可以被视为 PUBLIC 或 PRIVATE,具体取决于已执行的其他 target_link_library() 调用和/或目标属性操作。target_link_libraries() 的文档对此进行了一些讨论,但您必须深入研究它提到的目标属性的文档,以了解哪些情况会导致 PRIVATE 或 PUBLIC 行为。

什么情况?(顺便说一句。这句话的作者是 Craig Scott,他似乎是 SO 的活跃用户,我相信他可以回答我......)

c++ cmake

12
推荐指数
1
解决办法
2257
查看次数

这里发生了什么?我将结果分配给C++中的结果

你能告诉我这里发生了什么吗?为什么有可能呢?

std::make_unique<int>(1) = std::make_unique<int>(1);
Run Code Online (Sandbox Code Playgroud)

我以为这make_unique返回了一个r值......

编辑: 你能提供一些这种结构的有用例子吗?

c++ unique-ptr c++14

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

cmake:设置多个项目和它们之间的依赖关系

我需要帮助为C++项目编写一个好的CMakeLists.txt.

我寻找答案,但我发现了什么.这是我的项目结构:

MainProj
|  ProjLib/
|  |  include/
|  |  |  proj_lib.h
|  |  src/
|  |  |  proj_lib.cc
|  |  CMakeLists.txt
|  ProjExec/
|  |  include/
|  |  |  proj_exec.h
|  |  src/
|  |  |  proj_exec.cc
|  |  CMakeLists.txt
|  CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

MainProj CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(MainProj CXX)

# enable C and C++ language
enable_language(C CXX)

# Add sub-directories
add_subdirectory(ProjLib)
add_subdirectory(ProjExec)
Run Code Online (Sandbox Code Playgroud)

ProjLib CMakeLists.txt

set (PROJLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set (PROJLIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)

set(PROJLIB_SRCS 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/proj_lib.cc
)

include_directories("${PROJLIB_SOURCE_DIR}")
include_directories("${PROJLIB_INCLUDE_DIR}")

add_library(ProjLib SHARED ${PROJLIB_SRCS} ${PROJLIB_INCLUDE_DIR})

target_include_directories …
Run Code Online (Sandbox Code Playgroud)

c++ cmake multiple-projects

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

当函数在gcc中没有返回时如何强制执行错误?

当函数定义在其体内没有返回时,是否可以强制执行错误(打破构建)?

考虑这个功能:

int sum(int a, int b) {
  int c = a + b;
  // and here should be return
};
Run Code Online (Sandbox Code Playgroud)

当我编译时g++ -Wall,我得到:

return函数中没有语句返回non-void [ -Wreturn-type]

但我希望这是一个很难的错误,而不是一个警告.

我目前正在使用GCC 4.9.2,但是如果有不同版本的GCC的解决方案也会有所帮助.

c++ gcc compiler-errors compilation

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

使用int初始化枚举类

编程时我发现了一些有趣的东西:

enum class Foo {
  FOO_THING,
  FOO_TOO
};

int main() {
  Foo foo{1};    // It is OK
  Foo foo2(1);   // It is an invalid
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我,为什么foo{1}编译器可以,为什么foo2(1)无效?

编译器GCC(g++ (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0)说:

$ g++ -Wall -std=c++17 foo.cpp

  error: cannot convert ‘int’ to ‘Foo’ in initialization
  Foo foo2(1);
Run Code Online (Sandbox Code Playgroud)

我真的想知道潜在的机制.:)))

编辑:也许是一些编译器bug ...

c++ enums initialization c++17

7
推荐指数
2
解决办法
2397
查看次数

是否可以将 Github 发布链接添加到 Ubuntu sources.list?

我实际上重新安装了我的 Ubuntu,我需要很多程序。当然,我想在最新版本中使用它。但是,Ubuntu 官方存储库通常包含旧版本的程序。所以我需要手动下载最新版本,例如从 Github。

是否可以向 Ubuntu 添加条目/etc/apt/sources.list,以便从 Github 版本下载和自动更新程序?

就像是:

deb https://github.com/git/git/releases

任何帮助将不胜感激。

ubuntu apt github repository ubuntu-18.04

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

如何将范围映射到值?

我实际上想知道在 C++ 中将字母正确分配给范围的最佳方法是什么。

例如,我们有这样的规模:

在此输入图像描述

我们可以用最简单的方式进行赋值:

if(a < 40)
  return 'T';
else if(a < 55)
  return 'D';
else if(a < 70)
  return 'P';
else if(a < 80)
  return 'A';
else if(a < 90)
  return 'E';
else if(a <= 100)
  return 'O';
Run Code Online (Sandbox Code Playgroud)

但是,您有更好的想法吗?

当我们有更大的数字和更多的字母时该怎么办(我认为 if 语句仍然很烦人......)?或者,如果范围之间有空闲空间(例如 30-40 45-55 60-70)怎么办?

c++ c++11

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

复制构造函数中的初始化列表中的make_unique是否有利于不使用noexcept说明符?

我的副本构造函数旁边有一个noexcept说明符的障碍.

#include <memory>
#include <vector>

class Foo final {
 public:
  Foo() noexcept = default;
  Foo(const Foo& oth) : impl_(std::make_unique<Foo::Impl>()) {} // <---
  ~Foo() noexcept = default;

private:
  class Impl;
  std::unique_ptr<Impl> impl_;
};

class Foo::Impl {
  ...
 private:
  std::vector<int> some_data;
}

Run Code Online (Sandbox Code Playgroud)

我不确定我是否应该放下noexcept复制构造函数,而有std::make_unique可能抛出bad_alloc.

任何帮助都会被贬低!

c++ copy-constructor noexcept c++11

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

条件运算符怪异输出

我曾经相信在下面的语句中使用条件运算符是可以的,但事实并非如此。在复杂的语句中是否有任何限制使用条件运算符?

#include <iostream>
using namespace std;

int main() {
    int a = 1;
    int b = 10;
    bool c = false;

    int result = a * b + b + c ? b : a;

    std::cout << result << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预测输出: 21

实际输出: 10

为什么?

c++ boolean conditional-operator

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

是否可以为std :: array类型添加自己的构造函数?

我试图为std::array类型添加我自己的构造函数,但我不确定是否可能以及如何做到这一点......

我试过这样的事:

typedef unsigned char byte_t;

namespace std {
  template<std::size_t _Nm>
  array::array(std::vector<byte_t> data)
  {
    // Some content
  }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个非常简单的机制来转换std::vector<byte_t>std::array<byte_t, size>.

  1. 有可能的?
  2. 我怎样才能做到这一点?

我正在使用C++ 14(我不能在我的项目中使用更新的标准)

c++ constructor-overloading stdvector stdarray c++14

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