假设
(gdb) print *this
Run Code Online (Sandbox Code Playgroud)
产生了20行输出.是的,会有Type <return> to continue, or q <return> to quit,但我想在输出到底部之后回滚到顶部.
我不认为http://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html回答了我的问题.它指出
<PgUp>
将活动窗口向上滚动一页.
但是当焦点在命令窗口上时,PgUp会回退命令历史记录,而不是在命令窗口中向后滚动.只有我这个行为受到了影响吗?
我正在使用Putty来SSH到RHEL(如果这有任何不同.)
我正在学习SFINAE,这是我第一次尝试打印"YES"仅适用于那些你可以输出的类型std::ostream(暂时忘掉std::operator<<(std::ostream &, T)......):
template <typename T>
void f(const T &) { std::cout << "NO" << std::endl; }
template <typename T, int SFINAE = sizeof(static_cast<std::ostream &(std::ostream::*)(T)>(
&std::ostream::operator<<))>
void f(const T &) { std::cout << "YES" << std::endl; }
Run Code Online (Sandbox Code Playgroud)
虽然它们似乎可以使用f(std::vector<int>())(产生"NO")但编译器抱怨f(0)的含糊不清:http://ideone.com/VljXFh
prog.cpp:16:5: error: call of overloaded 'f(int)' is ambiguous
f(0);
^
prog.cpp:6:6: note: candidate: void f(const T&) [with T = int]
void f(const T &) { std::cout << "NO" << std::endl; } …Run Code Online (Sandbox Code Playgroud) c++ sfinae overload-resolution template-meta-programming c++11
出于好奇,我想知道是否可以定义一个可以将其参数转换为字符文字的宏:
switch(getchar()) {
case MYMACRO(A): printf("Received A\n"); break;
case MYMACRO(a): printf("Received a\n"); break;
case MYMACRO(!): printf("Received an exclamation mark\n"); break;
default: printf("Neither a nor A nor !\n"); break;
}
Run Code Online (Sandbox Code Playgroud)
我头脑中有两种可能的解决方案:
枚举所有字符
#define LITERAL_a 'a'
#define LITERAL_b 'b'
...
#define MYMACRO(x) LITERAL_ ## x
Run Code Online (Sandbox Code Playgroud)
它不起作用MYMACRO(!)因为!它不是C标识符的有效组件.
将参数转换为字符串文字
#define MYMACRO(x) #x [0]
Run Code Online (Sandbox Code Playgroud)
它涉及指针取消引用,在像案例标签这样的地方无效.
我不是要求一种方法来"改进"上面的switch语句本身.这只是一个玩具的例子.重复.这只是一个玩具的例子.
我没有给-Wl,-rpath=$HOME/local/gcc52/lib64每次从源代码构建的GCC 5.2调用,而是spec以这种方式修改了它的文件:
*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) -rpath=%:getenv(HOME /local/gcc52/lib64) ...
Run Code Online (Sandbox Code Playgroud)
但这取决于我的具体安装$HOME/local/gcc52.有没有更好的方法来引用调用的GCC本身的安装路径?
本手册页对我帮助不大:
我正在研究一种可能被称为"overloaded lambda"的C++ 11习语:
使用可变参数模板重载n个函数似乎对我很有吸引力,但事实证明它不适用于变量捕获:任何[&] [=] [y] [&y]([this]如果在成员函数中)等导致编译失败:( error: no match for call to '(overload<main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)> >) (char*&)'使用我的本地GCC 4.9.1和ideone .com GCC 5.1)
另一方面,固定的2-ary情况没有遇到这个问题.(尝试改变第一#if 0到#if 1上ideone.com)
关于这里发生了什么的任何想法?这是编译器错误,还是我偏离了C++ 11/14规范?
#include <iostream>
using namespace std;
#if 0
template <class F1, class F2>
struct overload : F1, F2 {
overload(F1 f1, F2 f2) : F1(f1), F2(f2) { }
using F1::operator();
using F2::operator();
};
template <class F1, class F2>
auto …Run Code Online (Sandbox Code Playgroud) c++ lambda template-meta-programming variadic-templates c++11
如何isprint在Python中搜索给定字符串中的10个字符的序列?
使用GNU grep,我会这样做 grep [[:print:]]{10}
open System
let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q
let y = Some(1, 2)
try
let None = y
()
with
| ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
Run Code Online (Sandbox Code Playgroud)
当我取消注释最后一行时,编译器拒绝代码抱怨
/home/rRiy1O/prog.fs(16,19):错误FS0039:值或构造函数'r'未定义
/home/rRiy1O/prog.fs(16,21):错误FS0039:值或构造函数的' 没有定义
是不允许在解构中使用枚举let?
但首先,甚至当我注释掉最后一行...什么我在这里干什么?这是输出:
A (1, 2)
B 1 2
D Some (1, 2)
Run Code Online (Sandbox Code Playgroud)
为了记录,这是固定版本: …
func Match(pattern, name string) (matched bool, err error)
Run Code Online (Sandbox Code Playgroud)
为什么不必pattern有类型(如pattern string)?
这是我在编写某些类系统软件时使用C/C++的最重要原因之一,但它只不过是一个非常常见的编译器扩展.为什么委员会不考虑正式支持它?它是否与现有规范中的任何子句不兼容,例如public和private是否对对象的内存布局有影响?
请参阅标签部分.
这个决定背后的理由是什么?合并是否会影响构建最新binutils和GDB的建议方式?(事实上当我检查binutils-2_25_1并跑步时make all && make install,我也得到了gdb.)