Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
这是一段C++ 11代码的示例:
auto text = std::unique_ptr<char[]>(new char[len]);
Run Code Online (Sandbox Code Playgroud)
Eclipse编辑器抱怨:
Function 'unique_ptr' could not be resolved
Run Code Online (Sandbox Code Playgroud)
Makefile编译工作正常.如何让Eclipse停止抱怨这些错误?
免责声明: 这不是一个真实的例子.这只是这些语言如何运作的理论问题.
在发布和预增量运算符方面,C/C++,C#和Java之间究竟有什么区别?
这是我用VC++ 10,Java 1.6和C#4获得的
int a = 2;
int b = a++ + a++;
int c = ++a + a++ + a++;
+-----+------+------+----+
| C | C++ | Java | C# |
+-----+-----+------+------+----+
| a | 7 | 7 | 7 | 7 |
+-----+-----+------+------+----+
| b | 4 | 4 | 5 | 5 |
+-----+-----+------+------+----+
| c | 15 | 15 | 16 | 16 |
+-----+-----+------+------+----+
Run Code Online (Sandbox Code Playgroud) 赏金简短说明
是否有可移植的方式来使用具有多个检出的单个存储库?作为多个克隆的替代方案,其中有太多的开销(推/拉/同步......)以及覆盖.git/objects
硬链接的风险(甚至在Windows上都不起作用).
git很新,很想听听有经验的git用户的想法.
是否有一个概念上的原因,为什么git一次只适用于一个分支?在大多数情况下我需要同时处理至少两个不同的分支,例如构建,并行运行时,在分支之间切换前后似乎是绝对不切实际的.
好吧,也许开发人员不一定需要同时在两个分支上工作.但检查另一个分支不会自动携带忽略的东西,如构建输出文件.因此,aso需要进行新的重建
有这个脚本git-new-workdir
应该允许多个工作分支,但是对于一个,它不是git发布的一部分,虽然它已经存在了大约3年,所以我不相信它保持我的文件一致.其次,我找不到它作为Windows发行版的一部分,它是我用于开发的机器之一.
所以唯一正式的选择是为每个分支创建一个新的"克隆",这似乎是不正确的,因为每个克隆都是一个完整的存储库.我甚至不知道该怎么称为克隆目录 - 我是使用存储库名称还是分支名称或两者兼而有之?如果我在该分支上创建另一个分支,aso
实际用例更新 (@ Philip的建议)
我通常会处理两个主要/次要版本,其功能同时进行.在合并到未来的某个版本之前,还有一个偶尔的开发分支,其中包含实验功能.
在功能开发期间,通常会降低行为,并且将其与更改之前的行为进行比较会更有效.检查以前的分支/修订版是不够好的,因为很多时候它都是并行调试,这意味着需要在硬盘驱动器上同时检出这两个版本.
因此,更方便和自然的方法是保留一些所谓的"活动"分支,每个分支都在自己的目录中检查,并使用自己编译的二进制文件.这也可以节省编译时间和偶尔的本地设置(即每次结账后需要更改的配置文件,以使产品运行).
我有一个Eclipse项目列表,我想根据现有的项目配置进行编译.
至于我可以告诉大家,如果一个Ant脚本可以读取classpath文件,那就几乎可以推断出该项目的依赖,并以正确的顺序执行"的javac"编译.这将节省在ant脚本或Makefile中再次描述相同依赖项的时间.
我感兴趣的依赖项是JAR依赖项,JRE依赖项和项目间依赖项.这些是 - 据我所知 - 是.classpath XML文件的一部分.
关于Eclipse项目依赖项如何在ant脚本中使用的任何想法?
我想创建一个单一的提交,它将使当前分支的内容(并隐式地同步)与另一个分支相同.
这实际上相当于复制粘贴当前分支顶部的另一个分支的结账内容并一次性提交所有内容.
在编译/运行时检查特定结构/类没有任何虚函数的方法是什么.在进行新的放置时,需要进行此检查以确保正确的字节对齐.
拥有一个虚拟函数就可以将整个数据移动一个vtable指针大小,这将与放置new运算符一起完全搞乱.
更多细节:我需要适用于所有主要编译器和平台的东西,例如Windows,Linux和Solaris之上的VS2005,VC++ 10,GCC 4.5和Sun Studio 12.1.
保证与以下场景一起使用的东西应该足够了:
struct A { char c; void m(); };
struct B : A { void m(); };
Run Code Online (Sandbox Code Playgroud)
如果有人决定进行此更改:
struct A { char c; virtual void m(); };
struct B : A { void m(); };
Run Code Online (Sandbox Code Playgroud)
很高兴看到编译时错误 struct A must not contain virtual functions.
任何人都知道为什么标题中VOID
定义了一个大写的宏winnt.h
?
为了使事情更加混乱,VOID
是一个宏观的,而CHAR
,SHORT
,INT
,和LONG
是类型定义.
参见相关摘录winnt.h
:
#ifndef VOID
#define VOID void
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
#if !defined(MIDL_PASS)
typedef int INT;
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
一个历史原因或许可以VOID* pointer
代替void* pointer
?
编辑:更令人不安的是看到人们使用VOID
而不是今天void
做Windows编程.您还可以将其视为MSDN文档的一部分,例如http://msdn.microsoft.com/en-us/library/bb205867(v=vs.85).aspx
以下代码使用GCC 4.4.6和Comeau 4.3.10进行编译.
#include <iostream>
struct A { int name; };
template<typename T> struct C : T { using T::name; };
struct B : private A { friend struct C<B>; };
int main()
{
C<B> o;
o.name = 0;
}
Run Code Online (Sandbox Code Playgroud)
它在VC++ 10中给出以下错误:
Run Code Online (Sandbox Code Playgroud)main.cpp(4): error C2877: 'A::name' is not accessible from 'A' main.cpp(10): error C2247: 'A::name' not accessible because 'B' uses 'private' to inherit from 'A'
什么是允许的良好的交叉编译器解决方案o.name = 0;
?
注意:添加using A::name
以B
处理问题,但将A::name
成员发布给每个人,而它应该只对特定模板实例可见,即C<B> …
编辑: 主要目的是允许操作底层数据作为封装结构的一部分,而不是直接数据操作.
在结构中包含一些数据时,建议使用以下哪种方法:
保持指向结构中数据的指针:
new s(buf)
,将buf存储在本地字段中(s->buf = buf
)
将内存地址重新解释为一个结构:
reinterpret_cast<s*>(buf)
将new
运算符用于数据所在的内存地址:
new(buf) s;
以下是这些方法的示例程序:
#include <iostream>
using namespace std;
struct s {
int* i;
s(int* buf) : i(buf) {}
int getValue() { return *i * 2; }
};
struct s2 {
int i;
int getValue() { return i * 2; }
};
int main() {
int buf = 10;
s a(&buf);
cout << "value: " << a.getValue() << ", size: " << sizeof(a) << ", …
Run Code Online (Sandbox Code Playgroud) 我希望为以下C++编译问题和相应的编译器启用警告:
未使用的变量 - Sun Studio CC
例: void m() { int i = 10; }
签署无符号比较 - VC++和Sun Studio CC
例: if ((unsigned) 10 < -1);
错误的字段初始化顺序 - VC++和Sun Studio CC
例: class A { int i, j; A() : j(0), i(0) {} };
所有这些都被GCC捕获,我想在VC++和Sun Studio中启用它们.
bash-4.1$ g++ -Wall main.cpp
main.cpp: In function ‘void m()’:
main.cpp:1: warning: comparison between signed and unsigned integer expressions
main.cpp:1: warning: unused variable ‘i’
main.cpp: In constructor ‘A::A()’:
main.cpp:1: warning: ‘A::j’ …
Run Code Online (Sandbox Code Playgroud) 我担心MinGW编译器对64位的可靠性,作为Visual C++编译器的替代品.
例如,假设C++代码在Linux下使用GCC 4.6.2构建并完美运行,相应的MinGW是否会在64位Windows下生成类似可靠的可执行文件/库?
Cygwin在可靠性方面是更好的选择吗?是不是Visual C++编译器?
考虑在Windows上使用MinGW替代VC++,但我担心兼容性问题.我在思考Windows上的行为,性能(MinGW编译EXE的任何机会都可能起作用).此外,在调用Windows API,第三方DLL,普遍和使用兼容的静态库,以及与两个编译器混合相同应用程序的部分时遇到的其他问题.
我需要从同一台机器上运行的另一个JVM调用一个方法.需要使用Java /类似本机的性能来调用此方法很多次.它是一种小输入小输出方法.另一个JVM在同一台机器上运行.
进行此调用并从运行"附近"的其他JVM检索结果的最快方法是什么?
一些选项可能是RMI,管道,套接字,JMS,优化的同一机器JVM间通信支持,以及JVM中的一些低级别攻击.任何想法都是受欢迎的,无论它是多么专业.