是否有一个很好的方法来编写带有函数调用的默认参数的C/C++函数头?
我有一些功能的标题:
int foo(int x, int y = 0);
Run Code Online (Sandbox Code Playgroud)
我在一个大型代码库中工作,其中许多函数调用此函数并依赖于此默认值.此默认值现在需要更改为动态的东西,我正在寻找一种方法:
int foo(int x, int y = bar());
Run Code Online (Sandbox Code Playgroud)
其中bar()是一些根据某些系统参数生成默认值的函数.或者,这个函数原型看起来像:
int foo(int x, int y = baz.bar());
Run Code Online (Sandbox Code Playgroud)
其中baz是属于未在头文件中实例化的对象的函数.
在.NET属性中应该是一等公民,但在IL代码属性中,getter和setter实现为get_PropertyName和set_PropertyName.
class Property
{
int Value { get { return 42; } }
int get_Value() { return 6 * 9; }
void set_Value(int i) { } // Error even though Value is a read only property
}
Run Code Online (Sandbox Code Playgroud)
输出:
错误CS0082:类型'SO.Property'已经保留了一个名为'get_Value'的成员,其成员具有相同的参数类型
错误CS0082:类型'SO.Property'已经保留了一个名为'set_Value'的成员,其成员参数类型相同
为什么设计师.NET决定使用可能与用户代码冲突的名称?他们本可以使用非法字符(因为Java $用于内部类).
在研究问题的答案时(基于这个答案),我尝试做以下事情:
template <class T>
class friendly {
friend class T;
};
friendly<string> howdy;
Run Code Online (Sandbox Code Playgroud)
无法编译时出现以下错误:
错误:模板参数"T"不能用在精心设计的类型说明符朋友类T中;
从我的好朋友Google可以理解的是,我不会不小心尝试实例化,friendly<int>但为什么在编译模板时这是一个错误?在使用无效类型实例化模板时不应该是错误(例如我写的int f() { return T::foo(); })
class xyz{
...
...
};
while(i<n){
xyz ob;
...
...
}
Run Code Online (Sandbox Code Playgroud)
在重新分配内存之前,是否需要销毁早期的对象?
我正在尝试将分支合并到稀疏的签出中(我在分支中触及的所有文件都包含在签出中)并且我收到以下错误:
不能完全无限地重新融入工作副本
这是否意味着我的意思?你必须有一个完全递归的结账才能合并到?
我想知道为什么C#不允许private virtual函数并且碰到了恰当的命名为什么私有虚方法在C#中是非法的?
在接受的答案中,Eric Lippert(他可能知道他在说什么......)说:
如果您希望限制在非嵌套派生类中重写方法的能力,那么您可以通过限制非嵌套类从基类派生的能力来实现;
在C++ private: virtual中有意义,因为它意味着"我希望从我派生的类覆盖此函数的功能,但它们不能直接调用它",换句话说,private控制谁可以调用函数并且对谁不能影响覆盖它.
我意识到,因为只有派生类可以首先覆盖,并且由于C#禁止private virtual函数,这个问题可能毫无意义,还有其他场景,其中函数的保护级别可以影响谁可以覆盖它(protected internal可能)?
在:http://www.horstmann.com/ccj2/ccjapp3.html,在A3.4下.对象,提到以下内容:
在C++中,对象变量包含值,而不是对象引用
你能澄清这一点吗?并且,它只是pointer在C++中持有对象引用吗?
我们可以在这说这object reference是object address吗?
谢谢.
所以我一直在使用GCC 4.6进入新的C++,它现在有基于范围的for循环.我发现这对迭代数组和向量非常好.
出于主要的美学原因,我想知道是否有办法用它来取代标准
for(int i = min; i < max; i++) {}
喜欢的东西
for(int& i : std::range(min, max)) {}
新的C++标准中是否有内置的东西允许我这样做?或者我必须编写自己的范围/迭代器类?
C++ 11引入了可变参数模板
template <typename... Args>
void foo(Args... params) {
cout << sizeof...(Args) << endl;
}
Run Code Online (Sandbox Code Playgroud)
Args和的名字是params什么?我知道其中一个(至少?)被称为可变参数模板包,但它是什么?另外叫什么?
c++ ×7
c++11 ×2
.net ×1
c# ×1
class ×1
exception ×1
for-loop ×1
foreach ×1
friend ×1
javascript ×1
merge ×1
object ×1
parameters ×1
private ×1
properties ×1
reference ×1
svn ×1
templates ×1
terminology ×1
throw ×1