我看到某个地方有人决定复制一个对象并随后将其移动到一个类的数据成员的代码.这使我感到困惑,因为我认为移动的重点是避免复制.这是一个例子:
struct S
{
S(std::string str) : data(std::move(str))
{}
};
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
str?std::string吗?这是我的~/.emacs档案:
(setq-default c-basic-offset 4 c-default-style "linux")
(setq-default tab-width 4 indent-tabs-mode t)
(define-key c-mode-base-map (kbd "RET") 'newline-and-indent)
Run Code Online (Sandbox Code Playgroud)
我打开emacs时收到警告:
警告(初始化):加载时发生错误
c:/home/.emacs:符号的值作为变量是无效的:
c-mode-base-map要确保正常操作,您应该调查并删除初始化文件中的错误原因.使用
--debug-init选项启动Emacs 以查看完整的错误回溯.
我跑了--debug-init,这就是它返回的内容.我不知道我的意思:
调试器输入 - Lisp错误:(void-variable
c-mode-base-map)Run Code Online (Sandbox Code Playgroud)(define-key c-mode-base-map (kbd "RET") (quote newline-and-indent)) eval-buffer(#<buffer *load*> nil "c:/home/.emacs" nil t) ; Reading at buffer position 311 load-with-code-conversion("c:/home/.emacs" "c:/home/.emacs" t t) load("~/.emacs" t t)
我有这个代码:
template<
class T = const int &
> void f(T) {}
void f(const int &) {}
int main() {
f(0);
}
Run Code Online (Sandbox Code Playgroud)
为什么称它为第二个而不是第一个?我会认为它们是相同的,但它们显然不是因为我没有得到重新定义错误.
我想创建一个模板,我可以在其中输入索引,它将为我提供该索引的类型.我知道我可以这样做,decltype(std::get<N>(tup))但我想自己实现.例如,我想这样做,
typename get<N, std::tuple<int, bool, std::string>>::type;
Run Code Online (Sandbox Code Playgroud)
...它会给我位置的类型N - 1(因为数组从0开始索引).我怎样才能做到这一点?谢谢.
我经常听到"连接图书馆"一词.我是编译器的新手,因此我很想了解这一点.
链接库是什么意思,什么时候不这样做会导致问题?
这些功能有什么区别.当我使用它们时,它们都做同样的事情.例如,所有三个调用都返回"hello":
#include <iostream>
#include <sstream>
int main()
{
stringstream ss("hello");
char x[10] = {0};
ss.read(x, sizeof(x)); // #1
std::cout << x << std::endl;
ss.clear();
ss.seekg(0, ss.beg);
ss.readsome(x, sizeof(x)); // #2
std::cout << x << std::endl;
ss.clear();
ss.seekg(0, ss.beg);
ss.get(x, sizeof(x)); // #3
std::cout << x;
ss.clear();
ss.seekg(0, ss.beg);
ss.getline(x, sizeof(x)); // #4
std::cout << x << std:endl;
}
Run Code Online (Sandbox Code Playgroud) 为什么在这个例子中没有打印出来?我正在Coliru的Clang编译.
#include <iostream>
struct S
{
S() noexcept = default;
S(S&&) noexcept { std::cout << "move-ctor"; }
};
void f(S) {}
int main()
{
f(S{});
}
Run Code Online (Sandbox Code Playgroud) 出于某种原因,每当我进入命令行时,这就是我在 cwd 旁边看到的内容:

几天前,我收到一条错误消息,说我遇到了合并冲突。我不知道这意味着什么,所以我停止尝试提交。现在,每当我进入 git 终端时,我都会看到(master|MERGING). 每当我尝试提交时(即使它不在同一个遥控器上),我都会收到一个冗长的错误:

它说要修复错误,但我不知道该怎么做。我到底需要做什么?
当我创建一个像这样的用户定义类的数组时,它将默认构造每个元素:
S s[5]; // calls default constructor five times, one for each S object
Run Code Online (Sandbox Code Playgroud)
但是如果我的类不是默认构造的呢?我如何能够实例化并稍后使用此数组?
例如,我的类S可能不是默认构造的,但它确实有另一个这样的构造函数:
S(int, int);
Run Code Online (Sandbox Code Playgroud)
如何让它调用此构造函数而不是默认构造函数?
假设我正在创建一个使用某个库的项目,并且我必须在链接时提供该库的路径。在命令行或 makefile 中,我可能有:
g++ ... -L/path/to/mylibrary
Run Code Online (Sandbox Code Playgroud)
我也会把这个项目发给其他想要使用它的人。他们系统上的路径可能不一定与我的相同。他们可能一起使用不同的文件路径。
我如何确保库的路径对我的计算机和我的项目的接收者都有效?