小编Mot*_*tti的帖子

函数调用的结果可以用作默认参数值吗?

是否有一个很好的方法来编写带有函数调用的默认参数的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是属于未在头文件中实例化的对象的函数.

c++ parameters default-value

6
推荐指数
4
解决办法
477
查看次数

为什么属性设置器和getter与get_X和set_X方法冲突?

.NET属性中应该是一等公民,但在IL代码属性中,getter和setter实现为get_PropertyNameset_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 $用于内部类).

.net language-design properties

6
推荐指数
2
解决办法
729
查看次数

为什么我不能成为模板参数的朋友?

在研究问题的答案时(基于这个答案),我尝试做以下事情:

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(); })

c++ templates friend

6
推荐指数
1
解决办法
707
查看次数

我可以用类对象做到这一点吗?

class xyz{

...
...
};

while(i<n){
           xyz ob;
           ...
           ...
}
Run Code Online (Sandbox Code Playgroud)

在重新分配内存之前,是否需要销毁早期的对象?

c++ class

6
推荐指数
3
解决办法
90
查看次数

SVN是否支持合并到稀疏检出中?

我正在尝试将分支合并到稀疏的签出中(我在分支中触及的所有文件都包含在签出中)并且我收到以下错误:

不能完全无限地重新融入工作副本

这是否意味着我的意思?你必须有一个完全递归的结账才能合并到?

svn merge sparse-checkout

6
推荐指数
1
解决办法
997
查看次数

应该在JavaScript中抛出什么类型的异常?

应该在JavaScript中抛出什么类型的对象?

我看到很多例子都是一个普通的旧版本string,似乎有一种半标准的Error类型.我应该更喜欢一个吗?

javascript exception throw

6
推荐指数
1
解决办法
173
查看次数

私有在C++和C#中是否意味着不同的东西?

我想知道为什么C#不允许private virtual函数并且碰到了恰当的命名为什么私有虚方法在C#中是非法的?

在接受的答案中,Eric Lippert(他可能知道他在说什么......)说:

如果您希望限制在非嵌套​​派生类中重写方法的能力,那么您可以通过限制非嵌套类从基类派生的能力来实现;

在C++ private: virtual中有意义,因为它意味着"我希望从我派生的类覆盖此函数的功能,但它们不能直接调用它",换句话说,private控制谁可以调用函数并且对谁不能影响覆盖它.

我意识到,因为只有派生类可以首先覆盖,并且由于C#禁止private virtual函数,这个问题可能毫无意义,还有其他场景,其中函数的保护级别可以影响谁可以覆盖它(protected internal可能)?

c# c++ language-design private

6
推荐指数
1
解决办法
422
查看次数

C++中的对象变量包含值,而不是对象引用

在:http://www.horstmann.com/ccj2/ccjapp3.html,在A3.4.对象,提到以下内容:

在C++中,对象变量包含值,而不是对象引用

你能澄清这一点吗?并且,它只是pointer在C++中持有对象引用吗?

我们可以在这说这object referenceobject address吗?

谢谢.

c++ reference object

6
推荐指数
2
解决办法
1万
查看次数

C++ 0x用基于范围的for循环替换(int i ;;)范围循环的方法

所以我一直在使用GCC 4.6进入新的C++,它现在有基于范围的for循环.我发现这对迭代数组和向量非常好.

出于主要的美学原因,我想知道是否有办法用它来取代标准

for(int i = min; i < max; i++) {}

喜欢的东西

for(int& i : std::range(min, max)) {}

新的C++标准中是否有内置的东西允许我这样做?或者我必须编写自己的范围/迭代器类?

c++ foreach for-loop c++11

6
推荐指数
1
解决办法
1506
查看次数

为可变参数模板添加的新语法实体的名称是什么?

C++ 11引入了可变参数模板

template <typename... Args>
void foo(Args... params) {
    cout << sizeof...(Args) << endl;
}
Run Code Online (Sandbox Code Playgroud)

Args和的名字是params什么?我知道其中一个(至少?)被称为可变参数模板包,但它是什么?另外叫什么?

c++ terminology variadic-templates c++11

6
推荐指数
1
解决办法
145
查看次数