何时在C++中使用未命名的命名空间?在任何意义上它比独立功能更好吗?是否应该仅在源文件中使用而不在头文件中使用?
我试图使用这样的静态块:
我有一个基类叫 Base.java
public class Base {
static public int myVar;
}
Run Code Online (Sandbox Code Playgroud)
派生类Derived.java:
public class Derived extends Base {
static
{
Base.myVar = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
我的main功能是这样的:
public static void main(String[] args) {
System.out.println(Derived.myVar);
System.out.println(Base.myVar);
}
Run Code Online (Sandbox Code Playgroud)
这打印输出0 0就像我预期的那样10 0.有人可以解释这种行为吗?另外,如果我希望我的派生类设置静态变量的值,我该如何实现呢?
我没有在任何生产环境中使用此代码,这只是为了我的理解.这段代码是否有效(即我可以像这样定义我的postfix运算符吗?):
class A
{
public:
A& operator++(int n)
{
std::cout<<"N is:"<<n<<"\n";
return *this;
}
};
int main()
{
A a;
a++;
a.operator ++(10);
}
Run Code Online (Sandbox Code Playgroud)
在VS2008上,我得到输出为:
N是0
第一次通话和
N是10
第二次通话
我有以下代码:
void f(String t)
{
if(t.equals("a"))
{
someObject.setType(ObjectType.TYPE_A);
}
else if(t.equals("b"))
{
someObject.setType(ObjectType.TYPE_B);
}
// 50 more similar code
}
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来重写if-else条件,以便没有那么多代码?
对于许多问题,我看到推荐的解决方案是使用union-find数据结构.我试着阅读它并思考它是如何实现的(使用C++).我目前的理解是它只是一组集合.因此,要找到元素所属的集合,我们需要n*log n操作.当我们必须执行union时,我们必须找到需要合并的两个集合set_union并对它们进行处理.这对我来说看起来并不十分有效.我对这个数据结构的理解是正确的还是我错过了什么?
我只是使用此代码试验参考:
class A
{
};
class B
{
public:
B(A& a): m_a(a){}
A& m_a;
};
int main()
{
A a;
B b(a);
B b1 = b;
}
Run Code Online (Sandbox Code Playgroud)
我期待两者都B b1 = b;产生错误.相反,当我使用VS2008编译时,我只是收到警告
警告C4512:'B':无法生成赋值运算符
我理解为什么我会收到这个警告.但是编译器不应该为B b1 = b;语句生成错误吗?它就像它生成了复制构造函数但没有生成赋值运算符.这两者本身并不相互联系吗?当另一个无法生成时,为其中一个生成默认实现是否有意义?
什么是正确的使用方法std::ref?我尝试在VS2010中使用代码并且它不能编译:
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
struct IsEven
{
bool operator()(int n)
{
if(n % 2 == 0)
{
evens.push_back(n);
return false;
}
return true;
}
vector<int> evens;
};
int main(int argc, char **argv)
{
vector<int> v;
for(int i = 0; i < 10; ++i)
{
v.push_back(i);
}
IsEven f;
vector<int>::iterator newEnd = remove_if(v.begin(), v.end(), std::ref(f));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
c:\ program files(x86)\ microsoft visual studio 10.0\vc\include\xxresult(28):error C2903:'result':symbol既不是类模板也不是函数模板
c:\ program files(x86)\ microsoft …
我正在尝试做一个简单的任务,从控制台读取空格分隔的数字到一个vector<int>,但我没有得到如何正确地做到这一点.
这是我到目前为止所做的事情:
int n = 0;
vector<int> steps;
while(cin>>n)
{
steps.push_back(n);
}
Run Code Online (Sandbox Code Playgroud)
但是,这需要用户按下无效字符(例如a)来打破while循环.我不想要它.
一旦用户输入数字0 2 3 4 5和按下,Enter我希望循环被打破.我试着用istream_iterator和cin.getline也,但我无法得到它的工作.
我不知道用户将输入多少元素,因此我正在使用vector.
请建议正确的方法来做到这一点.
这个问题让我想到了课堂上的max_size方法vector.很明显,实际上矢量中包含的元素数量将远少于max_size返回的元素数量.所以我想知道这会有用吗?有线索吗?
如何从具有visual studio的其他计算机远程调试托管应用程序.这是我尝试过的:
msvsmon.exe(64位版本,因为两台计算机都是64位).msvsmon.exe运行的机器的主机名.
我在这做错了什么?我正在尝试使用VS2008 Pro和两个系统上的操作系统是Windows Server 2008 R2,如果重要的话.
注意:我可以使用远程传输调试非托管应用程序而不会出现任何问题.
c++ ×7
stl ×3
java ×2
.net ×1
c# ×1
c++11 ×1
debugging ×1
if-statement ×1
inheritance ×1
iostream ×1
namespaces ×1
refactoring ×1
static ×1
static-block ×1
union-find ×1
vector ×1