当前位置: 首页 > 知识库问答 >
问题:

具有默认值的指针参数的类模板

舒斯伯
2023-03-14

我试图理解下面的代码片段

template <typename T>
class testopaque {
public:
    void test(T var = T()) {}
};

当使用指针类型示例int*调用时,默认参数是如何工作的?

int main() {
    testopaque<int *> obj1;
    obj1.test();
}

当obj1.test()被调用时,编译器将生成什么。我得到一个编译器错误当我尝试

int main() {
    int * var = int *();
}

error: expected primary-expression before ‘int’
int * ptr = int *();

共有3个答案

盛琪
2023-03-14

使用以下表达式时:

T var = T();

其中T是指针类型,然后var将被分配nullptr

东方骏
2023-03-14

这是一个C的复杂语法和语法如何产生意外结果的示例:

int *();

您的C编译器很容易将此构造解释为“返回指向int的指针的函数”。您的C编译器屈服于这种诱惑,并得到了观察到的结果。

您需要在这里教您的C编译器您要完成的任务:

typedef int *intp;

int main()
{
    int * var = intp();
}
陶和歌
2023-03-14

假设您有x=12。您是否希望x*3等于12*3等于7?

类似的问题正在这里发生int*()t=int*thent()不同。

尝试(int*){},它解决了组合解析和精确问题。或者使用T=int*; int*x=T();,甚至int*x={};

 类似资料:
  • 我一定错过了一些明显的东西,因为这真的让我大吃一惊。 以下代码给出了错误: 是否有理由必须实例化一个带有1个默认值的参数的模板,并为其指定一个值? 有人能引用标准吗?

  • 我想在模板类之外定义如下所述的函数。 已经为第二个参数尝试了很多组合,它是一个模板,并且也接受默认参数。 我希望它是在类之外定义的实际得到编译器错误,如果它是简单的类型,我可以很容易地在第二个参数中提到int、浮动等。

  • 是否允许在友元声明中为模板参数提供默认值? Visual Studio 2015似乎允许这样做。gcc拒绝了。我在cppreference页面上找不到任何内容。

  • 我如何在从下面的API生成的swagger中定义属性的默认值? Swashbuckle生成OrderDirection作为所需参数。我希望它是可选的,并向客户机指示默认值(不确定swagger是否支持此选项)。 我不喜欢使属性类型为空。还有其他选择吗?理想情况下使用内置类... 我用的是虚张声势的皮带扣。AspNetCore-https://docs.microsoft.com/en-us/asp

  • 如果允许我执行以下操作: 为什么我主要不被允许做以下事情? 但我必须具体说明以下几点: C11引入了默认的模板参数,现在我完全无法理解它们。

  • 问题内容: 我可以在AngularJS中设置路由参数的默认值吗?有没有有办法,并通过相同的途径来处理? 我希望重构现有的代码,如下所示: 它可以工作,但不是很优雅。有没有更好的办法 ? 问题答案: 不允许使用路由参数的默认值。 但是(中的)路由 不应具有默认参数。 资源可以具有默认参数。 在如果你想使用一个可选的参数的路线,这实际上是两个不同的路线。 为什么? 路线应该很简单 路由不允许参数的正则