Tag: 标准

C ++函数参数的评估顺序

如果我们有三个function(foo,bar和baz),就像… foo(bar(), baz()) baz之前有没有用C ++标准来保证吧?

通过C ++标准,通过下标:合法的方式来获取一个最后一个数组元素的地址?

我已经看到它现在断言了几次,下面的代码是不允许的C + +标准: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; 在这种情况下是否是&array[5]合法的C ++代码? 如果可能的话,我想要一个参考标准的答案。 知道它是否符合C标准也是有趣的。 如果它不是标准的C ++,那么为什么决定将它与array + 5或&array[4] + 1区别开来呢?

iframe是否被认为是“坏习惯”?

我认为使用内联框架是“不好的做法”的概念。 这是真的? 使用它们有什么优点/缺点?

有没有机器,其中sizeof(char)!= 1,或者至lessCHAR_BIT> 8?

是否有机器(或编译器),其中sizeof(char) != 1 ? C99标准是否说标准合规实现的sizeof(char)必须是1? 如果是这样,请给我部分号码和引文。 更新:如果我有一台机器(CPU),它不能寻址字节(最小读取是4字节,alignment),但只有4字节( uint32_t ), 本机的编译器可以将sizeof(char)定义为4 ? sizeof(char)将是1,但char将有32位 ( CHAR_BITmacros) 更新2:但sizeof结果不是一个字节! 这是CHAR的大小。 和字符可以是2个字节,或(可能)7位? Update3:好的。 所有机器都有sizeof(char) == 1 。 但是什么机器有CHAR_BIT > 8 ?

std ::向量元素是否保证是连续的?

我的问题很简单:std :: vector元素保证是连续的吗? 换句话说,我可以使用std :: vector的第一个元素作为C数组吗? 如果我的记忆为我服务,C ++标准没有做出这样的保证。 然而,std :: vector的要求是这样的,如果元素不是连续的,要满足它们几乎是不可能的。 有人可以澄清这一点吗? 例: std::vector<int> values; // … fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int v = array[i]; // do something with 'v' } }

有没有W3C有效的方式来禁用HTML表单中的自动完成?

使用xhtml1-transitional.dtd文档types时,使用以下HTML收集信用卡号码 <input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/> 将在W3Cvalidation器上标记警告: 没有属性“自动完成”。 是否有一个W3C /标准的方式来禁用浏览器自动完成在一个窗体中的敏感领域?

当一个函数具有一个特定大小的数组参数时,为什么它被一个指针replace?

鉴于以下scheme, #include <iostream> using namespace std; void foo( char a[100] ) { cout << "foo() " << sizeof( a ) << endl; } int main() { char bar[100] = { 0 }; cout << "main() " << sizeof( bar ) << endl; foo( bar ); return 0; } 输出 main() 100 foo() 4 为什么数组作为指针传递给第一个元素? 这是C的遗产吗? […]

为什么不是可变长度数组是C ++标准的一部分?

在过去的几年中,我并没有使用C语言。 当我今天看到这个问题时 ,我碰到了一些我不熟悉的C语法。 显然在C99中 ,以下语法是有效的: void foo(int n) { int values[n]; //Declare a variable length array } 这似乎是一个非常有用的function。 有没有关于将其添加到C ++标准的讨论,如果是的话,为什么它被省略? 一些潜在的原因: 供编译器厂商使用 与标准的其他部分不兼容 function可以与其他C ++结构模拟 C ++标准规定数组大小必须是一个常量expression式(8.3.4.1)。 是的,我当然知道,在玩具的例子中,可以使用std::vector<int> values(m); ,但是这从堆中分配内存而不是堆栈。 如果我想要一个multidimensional array,如: void foo(int x, int y, int z) { int values[x][y][z]; // Declare a variable length array } vector版本变得非常笨拙: void foo(int x, int y, […]

我在哪里可以find当前的C或C ++标准文档?

对于许多问题,答案似乎在“标准”中find。 但是,我们在哪里发现? 最好在线。 谷歌search有时候会觉得徒劳无功,尤其是对于C标准,因为在编程论坛的讨论洪水泛滥。 为了做到这一点,因为这些是我现在正在寻找的,那里有很好的在线资源: C89 C99 C11 C ++ 98 C ++ 03 C ++ 11 C ++ 14

有关在C ++标识符中使用下划线的规则是什么?

在C ++中通常使用某种前缀命名成员variables,以表示它们是成员variables,而不是局部variables或参数。 如果你来自MFC背景,你可能会使用m_foo 。 偶尔也看过myFoo 。 C#(或可能只是.NET)似乎build议只使用下划线,如_foo 。 这是由C ++标准允许的吗?