是否可以使用带向量的结构化绑定?
例如
std::vector<int> vec{1, 2, 3};
auto [a, b, c] = vec;
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码不起作用(在GCC下),但也许有一种不同的方式(结构化绑定)允许将向量的前三个值分配给三个变量.
我想知道什么是默认target_link_libraries隐私。
我在 CMake 中添加了一行:
target_link_libraries(myTarget
libraryA
libraryB
)
Run Code Online (Sandbox Code Playgroud)
但我不知道是不是PRIVATE,PUBLIC或者可能INTERFACE。我检查文档,但我没有看到我的问题的答案:(
编辑:
我发现某事:
最后要注意的是,如果您调用 target_link_libraries() 并且没有指定任何 PRIVATE、PUBLIC 或 INTERFACE,您可能会认为它将被视为 PUBLIC。然而,情况实际上比这更复杂。它可以被视为 PUBLIC 或 PRIVATE,具体取决于已执行的其他 target_link_library() 调用和/或目标属性操作。target_link_libraries() 的文档对此进行了一些讨论,但您必须深入研究它提到的目标属性的文档,以了解哪些情况会导致 PRIVATE 或 PUBLIC 行为。
什么情况?(顺便说一句。这句话的作者是 Craig Scott,他似乎是 SO 的活跃用户,我相信他可以回答我......)
你能告诉我这里发生了什么吗?为什么有可能呢?
std::make_unique<int>(1) = std::make_unique<int>(1);
Run Code Online (Sandbox Code Playgroud)
我以为这make_unique返回了一个r值......
编辑: 你能提供一些这种结构的有用例子吗?
我需要帮助为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) 当函数定义在其体内没有返回时,是否可以强制执行错误(打破构建)?
考虑这个功能:
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的解决方案也会有所帮助.
编程时我发现了一些有趣的东西:
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 ...
我实际上重新安装了我的 Ubuntu,我需要很多程序。当然,我想在最新版本中使用它。但是,Ubuntu 官方存储库通常包含旧版本的程序。所以我需要手动下载最新版本,例如从 Github。
是否可以向 Ubuntu 添加条目/etc/apt/sources.list,以便从 Github 版本下载和自动更新程序?
就像是:
deb https://github.com/git/git/releases
任何帮助将不胜感激。
我实际上想知道在 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)怎么办?
我的副本构造函数旁边有一个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.
任何帮助都会被贬低!
我曾经相信在下面的语句中使用条件运算符是可以的,但事实并非如此。在复杂的语句中是否有任何限制使用条件运算符?
#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
为什么?
我试图为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>.
我正在使用C++ 14(我不能在我的项目中使用更新的标准)
c++ ×10
c++11 ×2
c++14 ×2
c++17 ×2
cmake ×2
apt ×1
boolean ×1
compilation ×1
enums ×1
gcc ×1
github ×1
noexcept ×1
repository ×1
stdarray ×1
stdvector ×1
ubuntu ×1
ubuntu-18.04 ×1
unique-ptr ×1
vector ×1