相关疑难解决方法(0)

ISO/IEC网站和C和C++标准的收费

ISO C标准(ISO/IEC 9899)和ISO C++标准(ISO/IEC 14882)不在线发布; 相反,必须为每个标准购买PDF.我想知道这背后的理由是什么......对于C和C++编程语言来说,这些语言的权威规范是不是免费提供并且可以在线搜索,这对它没有害处吗?这是否鼓励使用可能不准确,非权威的来源获取有关这些语言的信息?

虽然我知道在开发C和C++标准方面付出了很多时间和精力,但我仍然对为规范收费的选择感到有些困惑.该OpenGroup的基本规范,例如,可在网上免费; 他们通过收取认证来赚钱.有谁知道为什么ISO标准委员会不会在证明标准合规性方面获得收入,而不是为这些文件收费?另外,有没有人知道ISO标准委员会看起来非常糟糕的网站是否有意这样看?就好像他们不希望人们访问和购买规范一样.

最后一件事...... C和C++标准通常被描述为"开放标准"......虽然我意识到这意味着任何人都被允许实施标准,是否应该修改"开放"的定义?为标准收费而不是公开提供似乎与开放精神相反.

PS我有ISO/IEC 9899:1999和ISO/IEC 14882:2003的副本,所以请不要谈论便宜或任何东西......虽然如果你想说这些东西,你可能想要考虑高中,本科生和研究生可能没有那么多额外的现金.此外,你可能想要考虑一个事实,即ISO网站真的很粗略,他们甚至不会告诉你成本,直到你进行结账...真的不鼓励人们去拿一份,现在做它?

编辑/评论
我认为,如果ISO标准委员会要从认证中获得收入,那么它会激励更小但更频繁地改变标准,而不是非常大的修订.它还会激励创建一个可实施的标准(我怀疑ISO C++委员会如果从认证中获得收入,就会首先引入"出口").

我找到了解决一个没有PDF在线的烦恼的解决方案....我已将我的标准副本上传到我的Google Docs中,这样我仍然可以从任何计算机访问它而无需携带它.

c c++ standards iso

41
推荐指数
5
解决办法
2899
查看次数

c ++ 14中是否有__cplusplus的标准定义?

我正在设置一些预处理器的东西,我想要一个更准确的数字,因为__cplusplusC++ 14应该被定义为.是否有一个标准强制要求?

c++ c++14

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

矢量数据如何对齐?

如果我想std::vector用SSE 处理数据,我需要16字节对齐.我怎样才能做到这一点?我需要编写自己的分配器吗?或者默认分配器是否已经与16字节边界对齐?

c++ sse vector alignment allocator

40
推荐指数
3
解决办法
2万
查看次数

条件运算符的返回类型和两阶段查找

请考虑以下代码段:

struct Base { };
struct Derived : Base { };

void f(Base &) { std::cout << "f(Base&)\n"; }

template <class T = int>
void g() {
    Derived d;
    f(T{} ? d : d); // 1
}

void f(Derived &) { std::cout << "f(Derived&)\n"; }

int main() {
    g();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我认为应该在第一阶段查找对fat 的函数调用// 1,因为它的参数的类型是明确的Derived&,因此可以解析为f(Base&)范围中唯一的一个.

Clang 3.8.0同意我的观点,但是GCC 6.1.0没有,并推迟f到第二阶段的查找,在那里f(Derived&)被选中.

哪个编译器是对的?

c++ dependent-name language-lawyer compiler-bug name-lookup

39
推荐指数
2
解决办法
1085
查看次数

为什么使用string :: iterator而不是index?

可能重复:
为什么使用迭代器而不是数组索引?

string::iterator it;
for (it = str.begin(); it < str.end(); it++) 
    cout << *it;
cout << endl;
Run Code Online (Sandbox Code Playgroud)

为什么不:

for (int i = 0; i < str.size(); i++)
    cout << str[i];
cout << endl;
Run Code Online (Sandbox Code Playgroud)

似乎string :: iterator也没有提供范围检查.我们为什么要使用string::iterator而不是索引?

谢谢.

c++ string iterator

38
推荐指数
3
解决办法
5万
查看次数

c ++结构是否有默认构造函数?

我写了以下代码片段:

void foo()
{
    struct _bar_ 
    {
        int a;
    } bar; 

    cout << "Value of a is " << bar.a;
}
Run Code Online (Sandbox Code Playgroud)

并用g ++ 4.2.1(Mac)编译它.输出为"a的值为0".

是否真的说c ++中的结构的数据成员默认是初始化的(与c相比)?或者观察到的结果是巧合吗?

我可以想象c ++中的结构有一个默认的构造函数(因为结构和类在c ++中几乎相同),这可以解释为什么bar的数据成员a初始化为零.

c++

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

34
推荐指数
4
解决办法
3万
查看次数

C11的最新变化

C1x已成为ISO/IEC 9899:2011又名C11.

有谁知道2011年4月草案n1570标准中有哪些变化(如果有的话)?

ETA:有从伦敦(2011年3月)的委员会会议记录(其中应包括在n1570)这里,从华盛顿特区(2011年10月)在这里 ; 我想DC分钟中接受的变化列表应涵盖的内容.

c standards c11

34
推荐指数
2
解决办法
4952
查看次数

Reinterpret_cast与C风格演员

我听说这reinterpret_cast是实现定义,但我不知道这是什么意思.你能提供一个如何出错的例子,它出错了,使用C-Style演员会更好吗?

c++ casting

32
推荐指数
4
解决办法
3万
查看次数

为什么不能在do while循环的表达式部分中声明变量?

以下语法有效:

while (int i = get_data())
{
}
Run Code Online (Sandbox Code Playgroud)

但以下不是:

do
{
} while (int i = get_data());
Run Code Online (Sandbox Code Playgroud)

我们可以通过标准草案N41406.4节了解原因:

1 [...]

condition:
     expression
     attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
     attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

2条件规则既适用于选择陈述,也适用于forwhile陈述(6.5).[...]

和第6.5

1迭代语句指定循环.

      iteration-statement: 
             while ( condition ) statement
             do statement while ( expression ) ;

相反,你被迫做一些丑陋的事情:

int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
Run Code Online (Sandbox Code Playgroud)

这是什么理由?

c++ declaration do-while

32
推荐指数
4
解决办法
5260
查看次数