当我编写下面的程序并使用GNU C ++编译器时,输出是1 ,我认为这是由于编译器执行的旋转操作。 #include <iostream> int main() { int a = 1; std::cout << (a << 32) << std::endl; return 0; } 但是从逻辑上讲,如果它们溢出了位宽,那么位会丢失,那么输出应该是0.发生了什么? 代码位于ideone, http: //ideone.com/VPTwj。
就这样。 没有find任何类似的话题,所以忍受着我。
在编译下面的代码时,我在VC2010中出错C2078。 struct A { int foo; double bar; }; std::array<A, 2> a1 = // error C2078: too many initializers { {0, 0.1}, {2, 3.4} }; // OK std::array<double, 2> a2 = {0.1, 2.3}; 我发现a1的正确语法是 std::array<A, 2> a1 = {{ {0, 0.1}, {2, 3.4} }}; 问题是:为什么a1需要额外的大括号,而a2不需要? 更新 这个问题似乎不是特定于std :: array。 一些例子: struct B { int foo[2]; […]
我的C#WinForms解决scheme有两个项目。 一个DLL是我正在开发的主要项目,一个可执行的WinForms我称之为“Sandbox”,这样我就可以一口气编译/运行/debuggingDLL。 我在两个项目的.NET 4.0工作。 一切工作正常,直到我添加了一些看似无辜的代码,并在DLL中对System.Web的引用。 现在我的沙盒项目无法看到DLL项目的名称空间。 我没有改变任何我认为会影响到的东西。 如果我从Sandbox引用中删除了对DLL的项目引用并重新添加它,那么红色下划线全部消失,并且所有类的颜色编码都会返回; 但是一旦我试图build立解决scheme,整个事情就会再次崩溃。 当我在Sandbox的引用中右键单击DLL项目并在对象浏览器中查看时,我可以看到名称空间和所有内容。 我有一种感觉,这可能是某种错误? 这是一些VS2010的错误? 几个月前我也遇到了同样的问题,我只能通过制作一个全新的项目并重新导入我的文件来解决这个问题。 但这一次,我有一个bajillion文件,只会作为最后的手段! 编辑:惊慌失措地经历和取消我所有的变化,试图找出是什么原因造成的问题,似乎是这样一行: string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address); 如果我注释掉这一行,那么我不会收到命名空间错误,项目也可以正常生成。 虽然我看不出这条线有什么问题。
我正在从C# .NET控制台应用程序中启动Java应用程序。 它适用于Java应用程序不关心“默认”目录的情况,但对于仅search当前目录中的支持文件的Java应用程序而言失败。 是否有可以设置stream程参数来指定启动进程的默认目录?
我昨天遇到了一个错误,虽然很容易解决,但我想确保我对C ++的理解是正确的。 我有一个受保护成员的基类: class Base { protected: int b; public: void DoSomething(const Base& that) { b+=that.b; } }; 这编译和工作就好了。 现在我扩展基地,但仍然想使用b: class Derived : public Base { protected: int d; public: void DoSomething(const Base& that) { b+=that.b; d=0; } }; 请注意,在这种情况下, DoSomething仍在引用一个Base ,而不是Derived 。 我期望,我仍然可以访问里面的Derived ,但我得到一个cannot access protected member错误(MSVC 8.0 – 还没有尝试gcc呢)。 显然,在b上增加公共getter解决了这个问题,但是我想知道为什么我不能直接访问b 。 我虽然说,当你使用公共inheritance保护variables仍然可见的派生类。
我的问题是关于枚举Dictionary元素 // Dictionary definition private Dictionary<string, string> _Dictionary = new Dictionary<string, string>(); // add values using add _Dictionary.Add("orange", "1"); _Dictionary.Add("apple", "4"); _Dictionary.Add("cucumber", "6"); // add values using [] _Dictionary["banana"] = 7; _Dictionary["pineapple"] = 7; // Now lets see how elements are returned by IEnumerator foreach (KeyValuePair<string, string> kvp in _Dictionary) { Trace.Write(String.Format("{0}={1}", kvp.Key, kvp.Value)); } […]
以下将导致==运算符重载方法的无限recursion Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); } 我如何检查空值?
下面的链接提供了4种forms的引用崩溃(如果我是正确的,这些是唯一的4种forms): http : //thbecker.net/articles/rvalue_references/section_08.html 。 从链接: A&&成为A& A &&&成为A& A &&&成为A& A && &&变成A && 虽然我可以做出一个有教养的猜测,但我想简要解释一下这些参考折叠规则背后的基本原理。 一个相关的问题,如果我可能:在典型的现实世界中,这些引用崩溃规则是由C ++ 11在内部被诸如std::move() , std::forward()类的STL实用程序使用用例? (注意:我具体询问在C ++ 11中是否使用引用合并规则,而不是C ++ 03或更早版本)。 我问这个相关的问题,因为我知道这样的C + + 11实用程序作为std::remove_reference ,但我不知道是否引用相关的工具,如std::remove_reference在C + + 11中经常使用,以避免需要用于引用合拢规则,或者它们是否与引用合拢规则一起使用 。
我正在使用Visual Studio 2012在Windows上编写Qt应用程序。 使用Qt插件和一个定制的Qt 5.0.2 静态分发。 每当我运行应用程序时,我遇到了可怕的"Failed to load platform plugin windows"错误。 我已经将以下内容添加到链接器input中: imm32.lib winmm.lib Ws2_32.lib qtmaind.lib Qt5Cored.lib Qt5Guid.lib Qt5Widgetsd.lib 起初我以为也许我应该添加“qwindowsd.lib”到这个列表中,但是这并没有解决问题。 为了使我的应用程序运行,我需要做些什么?