在我完成调试之前,我已经厌倦了不得不保持我的源代码不变.每次我更改代码时,GDB都会开始抱怨它:
警告:源文件比可执行文件更新.
直到我重新编译它,这不能总是快速完成.我认为,如果有可能将程序的源代码包含在其二进制文件中并使GDB使用它而不是其最新版本,那将会很棒.
任何人都可以建议如何做到这一点?这是否已实施?
被迫将可变长度数组功能用于打印方阵的辅助函数,我将其定义如下:
void print_matrix(M, dim)
unsigned dim;
int M[dim][dim];
{
/* Print the matrix here. */
...
Run Code Online (Sandbox Code Playgroud)
好消息是,代码可以正常工作,并且其参数按照我希望的顺序排列。
dim坏消息是,我必须使用“旧式”函数声明语法才能引用的声明中尚未声明的参数M,这显然被认为是过时且危险的。
是否有一种直接的方法可以对“新式”函数声明执行相同的操作而不更改参数的顺序?(如果不是,在这种特殊情况下使用旧式语法是否可以接受?)
我为漂亮的打印对实现了一个重载:
template<typename P>
ostream &operator<<(ostream &os, const P &p) {
using std::operator<<;
os << '(' << p.first << ", " << p.second << ')';
return os;
}
Run Code Online (Sandbox Code Playgroud)
但是,在它存在的情况下,编译器无法确定是应该应用标准重载还是应用上面定义的重载,即使选择应该是明显的:
int main() {
cout << "SFINAE sure is hard to grasp!\n";
}
error: use of overloaded operator '<<' is
ambiguous (with operand types 'std::ostream' (aka 'basic_ostream<char>') and
'const char [30]')
Run Code Online (Sandbox Code Playgroud)
我不太明白问题是什么.我正在尝试打印的char数组没有first或没有second成员,所以用我的重载实例化它会导致错误.
SFINAE不应该尝试执行替换,发现缺少成员,并丢弃结果吗?如果没有,为什么?