我正在尝试使用ANSI C++ for_each语句迭代并打印标准向量的元素.如果我有for_each调用非重载函数,它会工作,但如果我调用一个重载函数,则会产生编译器错误.
这是一个最小的测试程序,用于显示编译器错误发生的位置:
#include <algorithm>
#include <iostream>
#include <vector>
struct S {
char c;
int i;
};
std::vector<S> v;
void print_struct(int idx);
void print_struct(const struct S& s);
// f: a non-overloaded version of the preceding function.
void f(const struct S& s);
int main()
{
v.push_back((struct S){'a', 1});
v.push_back((struct S){'b', 2});
v.push_back((struct S){'c', 3});
for (unsigned int i = 0; i < v.size(); ++i)
print_struct(i);
/* ERROR! */
std::for_each(v.begin(), v.end(), print_struct);
/* WORKAROUND: */
std::for_each(v.begin(), v.end(), f);
return 0;
} …Run Code Online (Sandbox Code Playgroud) 我有以下名为test.cpp的C++测试程序:
#include <cmath>
#include <iostream>
double sqrt(double d) { return std::sqrt(d); }
int main()
{
std::cout << "sqrt(4): " << sqrt(4) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是一些非常人为的代码,你可能已经猜到我只是想用Stroustrup做一个练习.他宣称双sqrt(双),并希望读者定义它.
我使用g ++ 4.8(来自Qt 5.1的MINGW版本)编译了上面的代码:
C:\Windows\Temp>g++ -o test.exe -g test.cpp
Run Code Online (Sandbox Code Playgroud)
当我运行生成的可执行文件时,Windows 7说"test.exe已停止工作".
要查看出了什么问题,我在GNU调试器中运行了test.exe.调试器命令和输出:
C:\Windows\Temp>gdb -q test.exe
Reading symbols from C:\Windows\Temp\test.exe...done.
(gdb) b main
Breakpoint 1 at 0x401625: file test.cpp, line 8.
(gdb) run
Starting program: C:\Windows\Temp\test.exe
[New Thread 12080.0x2ba0]
Breakpoint 1, main () at test.cpp:8
8 std::cout << "sqrt(4): " << sqrt(4) << std::endl;
(gdb) s …Run Code Online (Sandbox Code Playgroud) 我有一个带有 C# 代码的 Windows 窗体应用程序,如下所示(针对 .NET Framework 4)。
在我的开发人员工作站上,此代码可以阻止我启动该程序的多个实例。但是,QA 有一个 Citrix 测试环境,每个用户仍然能够启动多个实例。
如何防止给定用户在 Citrix 中运行多个实例?
[STAThread]
static void Main(string[] args)
{
bool isFirstInstance;
Mutex m = new Mutex(true, "[App name goes here] mutex", out isFirstInstance);
if (isFirstInstance)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run();
// Prevent the just-in-time (JIT) compiler from optimizing away our Mutex.
// See: http://www.ai.uga.edu/mc/SingleInstance.html
GC.KeepAlive(m);
}
}
Run Code Online (Sandbox Code Playgroud)
出于技术原因,我们希望限制实例数量。该程序使用自承载 WCF 与同一用户运行的另一个进程进行通信。我们只希望每个用户有一个该程序的实例。
我不知道有关 Citrix 环境的任何详细信息,但可以询问。
谢谢。
谁能解释下面两个println语句的输出之间的区别?
public class LongTest {
public static void main(String[] args) {
System.out.println(Long.toBinaryString(0xffff_ffff_ffff_ffffL));
System.out.println(java.lang.Long.toBinaryString(Long.MAX_VALUE));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
第一行输出包含64位二进制数字.第二行仅包含63个二进制数字.
如果0xffff_ffff_ffff_ffffL大于Long.MAX_VALUE,我会发现编译器错误.但程序显然会编译,因此输出的差异必然是由于某些其他原因.