从C ++ 14开始,由于n3781(它本身不能回答这个问题),我们可以编写如下代码: const int x = 1'234; // one thousand two hundred and thirty four 目的是改进这样的代码: const int y = 100000000; 并使其更具可读性。 下划线(_)字符已经由用户定义的文本采取了C ++ 11,和逗号(,)的本地化问题-许多欧洲国家令人困惑†以此作为小数点分隔符-和冲突与逗号操作,虽然我做的想知道允许使用可能破坏了哪些实际代码1,234,567。 无论如何,更好的解决方案似乎是空格字符: const int z = 1 000 000; 这些相邻的数字文字标记可以和字符串文字一样由预处理器连接: const char x[5] = "a" "bc" "d"; 相反,我们得到撇号('),我所知道的任何书写系统都没有使用它作为数字分隔符。 是否存在选择撇号而不是简单空格的原因? †之所以感到莫名其妙,是因为所有这些语言在文本内都保持着逗号的概念,即“分开”原本原子的句子,并用句号“终结”该句子-至少对我而言,这与逗号“分解”数字的整数部分,并用句号“终止”数字以准备小数输入。
我有以下代码: namespace A { struct Foo { int a; }; } struct Foo { int b; }; struct Bar : public A::Foo { Bar(Foo foo) { c = foo.b; } int c; }; C ++编译器抱怨“ c = foo.b”,因为A :: Foo没有名为b的成员。如果我用:: Foo更改Bar参数的类型,它将起作用。 我的问题是此行为背后的原因是什么(我想这与继承使Bar进入A名称空间这一事实有关,但是我找不到任何文档来支持该理论。
之前已经讨论 过该主题,但这不是重复的。 当有人询问decltype(a)和之间的区别时decltype((a)),通常的答案是- a是变量,(a)是表达式。我觉得这个答案不令人满意。 首先,a也是一个表达。主表达式的选项包括: (表情) id表达 更重要的是,decltype的措词非常非常明确地考虑了括号: For an expression e, the type denoted by decltype(e) is defined as follows: (1.1) if e is an unparenthesized id-expression naming a structured binding, ... (1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ... (1.3) otherwise, if e …