考虑以下代码:
#include <iostream>
#include <vector>
struct C {
std::vector<int> a;
std::string b;
bool c;
};
void printC(const C &c) {
// ...
}
int main() {
printC({
{ 1, 2, 3 },
"ehlo",
false
});
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为编译器可以为我生成适当的构造函数.但是,如果我将struct C更改为:
struct C {
std::vector<int> a;
std::string b;
bool c;
C() {
c = false;
}
};
Run Code Online (Sandbox Code Playgroud)
printC调用停止工作,因为编译器停止生成适当的构造函数.我试过用std :: initializer_list写自己的构造函数但是失败了.
所以问题是 - 如何编写构造函数,使上面的代码再次编译和工作?
我以以下方式定义了多个 doskey:
doskey ll=dir $*
doskey grep=findstr $*
doskey make=mingw32-make $*
Run Code Online (Sandbox Code Playgroud)
我想在一行命令中结合使用它们,例如:
ll | grep my_folder
Run Code Online (Sandbox Code Playgroud)
或者
make && make install
Run Code Online (Sandbox Code Playgroud)
但是在第一个管道/非/和运算符之后,doskeys似乎不再存在,因为cmd将无法识别这些命令。例如,虽然单个make命令有效,但调用echo hello && make会告诉我 make 未被识别为命令。
有没有办法保留 doskey 上下文,以便我可以将它们链接在一起,如上所述?
另外,同样的问题也适用于使用 doskeys 运行批处理文件,有没有办法也保留上下文?
我听说过 doskey 的 $T 参数,但我不太确定我是否理解它。
感谢您提前的帮助
#include <functional>
void toggleOk(bool& b) { b = !b; }
void toggleBroken(bool b) { b = !b; }
void toggleInt(int i) { i = !i; }
void tooManyParams(bool b, int i) { i = !b; }
int main()
{
typedef std::function<void(bool&)> CallbackType;
typedef std::function<void(bool)> WrongCallbackType;
CallbackType cb1 = [](bool b) { b = !b; }; // Should throw error - missing reference
CallbackType cb2 = toggleOk; // Ok
CallbackType cb3 = toggleBroken; // Should throw error - missing reference
CallbackType …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
#include <iostream>
#include <cstring>
#include <cerrno>
int main() {
unsigned long num = strtoul("0xFFFFFFFFFFFF11223344556677889900AABBCCDDEEFF", NULL, 16);
std::cout << std::strerror(errno) << "\n";
unsigned long num2 = std::stoul("0xFFFFFFFFFFFF11223344556677889900AABBCCDDEEFF");
std::stoul("hello world");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预计该代码会从strerror打印一些“超出范围”,然后根据文档抛出out_of_range异常。它永远不会到达最后的污迹线。
实际上,它不会引发第二个stoul语句。我已经尝试了GCC 4.8.5和MinGW 8.2.0,但均未引发out_of_range异常,并且仅在最后一个stoul语句上传递了invalid_argument。
这是应该报告的错误,还是我缺少某些东西,并且这是预期的行为?
c++ ×3
c++11 ×2
c++17 ×1
cmd ×1
constructor ×1
doskey ×1
environment ×1
exception ×1
function ×1
g++ ×1
g++4.8 ×1
std-function ×1