为什么'class'和'main'中的相等表达式表现不同?
Why do equal expressions in 'class' and 'main' behave differently?
class Class {
public:
std::pair<int,int> p (45, 12);// error: "requires a type specifier"
};
int main(){
std::pair<int, int> pm (45, 12);// ok
}
包含"实用程序"标头。此外,如果我尝试通过"make_pair"创建一个对,编译器会写"标识符"make_pair未定义",但它是在"实用程序"中定义的,不是吗?
如果可以的话,这是一个非正式的答案。这两种说法是截然不同的野兽。第一个是尝试初始化的成员变量声明。
第二个是声明具有自动存储持续时间的变量,同样是初始化。
这个混乱在 C++11 中通过统一初始化得到了清理:
std::pair<int,int> p{45, 12};
无论哪种情况都有效。请注意大括号语法。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- "Undefined class"作为is_base_of的论据
- 为什么'class'和'main'中的相等表达式表现不同?
- "class":非法使用此类型作为表达式 如何解决?