gpt4 book ai didi

c++ - ISO C++03 对在函数范围内定义的结构有什么限制?

转载 作者:IT老高 更新时间:2023-10-28 22:35:08 26 4
gpt4 key购买 nike

我们不允许在函数内部定义仿函数结构,因为不允许在函数模板的实例化中使用函数声明的结构。

还有其他需要注意的重大陷阱吗?例如。这会很糟糕吗:

int foo()
{
struct Scratch
{
int a, b, c;
};
std::vector<Scratch> workingBuffer;
//Blah Blah
}

最佳答案

1. C++ 标准禁止使用带有模板的本地定义类。

14.3.1/2:本地类型、无链接类型、未命名类型或由这些类型中的任何一种复合的类型不得用作模板参数对于模板类型参数。

代码示例:

    template <class T> class X { /* ... */ };
void f()
{
struct S { /* ... */ };
X<S> x3; // error: local type used as
// template-argument
X<S*> x4; // error: pointer to local type
// used as template-argument
}

以下是来自 IBM 文档的更多引用:

2.本地类中的声明只能使用封闭范围内的类型名称、枚举、静态变量以及外部变量和函数。

代码示例:

int x;                         // global variable
void f() // function definition
{
static int y; // static variable y can be used by
// local class
int x; // auto variable x cannot be used by
// local class
extern int g(); // extern function g can be used by
// local class

class local // local class
{
int g() { return x; } // error, local variable x
// cannot be used by g
int h() { return y; } // valid,static variable y
int k() { return ::x; } // valid, global x
int l() { return g(); } // valid, extern function g
};
}

int main()
{
local* z; // error: the class local is not visible
return 0;
}

3.本地类不能有静态数据成员

代码示例:

void f()
{
class local
{
int f(); // error, local class has noninline
// member function
int g() {return 0;} // valid, inline member function
static int a; // error, static is not allowed for
// local class
int b; // valid, nonstatic variable
};
}

关于c++ - ISO C++03 对在函数范围内定义的结构有什么限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com