标签: standards

在课外定义的默认移动操作的异常规范是什么?

考虑这个课程:

class C1 {
  C1(C1&&) = default;        // declare and define move ctor
};
Run Code Online (Sandbox Code Playgroud)

因为C1的移动ctor在其第一个声明中被明确默认,所以标准的8.4.2告诉我们它具有相同的异常规范(ES),就好像该函数已被隐式声明一样.然后我们可以使用15.4/14和12.8/15来得出其ES的结论noexcept(true).

现在考虑一个C2相同的类,除了它的移动ctor在类定义之外默认:

class C2 {
  C2(C2&&);                 // declare move ctor
}; 

C2::C2(C2&&) = default;     // define move ctor
Run Code Online (Sandbox Code Playgroud)

C2移动ctor的ES是多少?因为它的第一次声明没有违约,所以8.4.2/2不适用.因为它没有明确的ES,所以8.4.2/3不适用.因为没有隐含声明,15.4/14不适用.据我所知,这意味着15.4/12适用,它表示默认函数ES是noexcept(false).

如果我是对的,这意味着C1中的移动ctor是noexcept(true),但C2中的概念相同的移动ctor是noexcept(false).

我对C2的推理是否正确?

standards move exception-specification c++11

2
推荐指数
1
解决办法
149
查看次数

为什么prolog的ISO模块标准失败?

这里的介绍中,它指出Prolog的ISO模块标准是失败的.任何人都可以详细说明这个吗?

standards iso module prolog iso-prolog

2
推荐指数
1
解决办法
426
查看次数

constexpr对象有没有办法引用/指向其他非静态constexpr对象?

假设我想在编译时使用某种算法构建图形,然后计算图形中结束的节点数.这似乎是constexpr的理想情况,而不是模板元编程,因为目标是计算产生一个值,而不是真正的类型.我有一些有用的代码,但功能是如此新,我担心编译器是宽松的,我可以解释部分标准说我不能这样做.

#include <iostream>

struct A { int x; constexpr A(int i) noexcept : x{i} {} };
struct B { A& a; constexpr B(A& a) noexcept : a{a} {} };

constexpr int foo() { 
    A a{55};
    B b{a};
    return b.a.x;
}

template<int N>
void output()
{
    std::cout << N << std::endl;
}

int main() {
    // to be absolutely sure compile time eval'd,
    // pass as template arg
    constexpr auto b = foo();
    output<b>();
}
Run Code Online (Sandbox Code Playgroud)

这两个ab实例都是在编译时创建的,它们具有相同的生命周期,所以这应该是"安全的".但这a …

c++ standards metaprogramming constexpr c++14

2
推荐指数
1
解决办法
442
查看次数

为什么''(空字符串)渗透所有字符串?

我今天只是遇到了一些困惑,"string".indexOf('');总是回归0,但我希望-1(因为false); 相反,"string".lastIndexOf('');总是返回6

lastIndexOf更容易理解,因为字符串是6个字母长("string".length是零索引返回5)但我没有看到ECMAscript规范(5.16.0)中描述为什么 ''会被视为单词/字符边界的任何地方

究竟是什么发生在这里?

javascript string standards ecma262 language-lawyer

2
推荐指数
1
解决办法
94
查看次数

C++是否保证cstdint sizeof的排序?

C++标准是否保证:

sizeof(uint8_t) <= sizeof(uint16_t) <= sizeof(uint32_t) <= sizeof(uint64_t)
sizeof(uint_least8_t) <= sizeof(uint_least16_t) <= sizeof(uint_least32_t) <= sizeof(uint_least64_t)
sizeof(uint_fast8_t) <= sizeof(uint_fast16_t) <= sizeof(uint_fast32_t) <= sizeof(uint_fast64_t)
Run Code Online (Sandbox Code Playgroud)

如果没有,它提供什么保证?(欢迎提取标准)

c++ standards integer sizeof c++11

2
推荐指数
1
解决办法
132
查看次数

什么可以在C99中返回bool类型?

什么是bool保证返回?我可以依赖bool类型来解释为0或1吗?如果bool的数值解释在C99中不可靠,那么有一个标准吗?在依赖bool进行算术运算时,我在LLVM,GCC或Visual C++中应该注意什么?

举个例子,如果我这样做:

// An example of calculating a possible stride in bytes.
// hasData(), is8bit(), and is16bit() return as bool type

unsigned int stride = object->hasData() * object->size() * 
                      (object->is8bit()  * sizeof(uint8_t) + 
                       object->is16bit() * sizeof(uint16_t));
Run Code Online (Sandbox Code Playgroud)

在示例中,我打赌bool类型只返回0或1.

c standards arithmetic-expressions integer-arithmetic

2
推荐指数
1
解决办法
205
查看次数

标准是否指定内联声明哪些函数?

所以问题是,最新标准是否指定标准C++库中的函数何时被内联声明?

望着algorithm从铛,GCC和MSVC的实现,每一个功能,除非是在constexpr的那些头文件,内联声明.

我会继续询问何时内联和什么不是,但我不想有关于编译器如何知道更好或微优化的通常论点,所以我可能不应该让这句话留在问题中.等一下...

c++ standards c++11

2
推荐指数
1
解决办法
84
查看次数

iOS Swift-表格视图单元动态高度取决于设备

有很多帖子问如何使表格视图单元格高度动态,我知道我可以做到HeightForRowAtIndexPath

我的问题是这是否是好的做法。

似乎无法解决的问题是检查设备并硬编码高度,以便能够占用更多空间,比如说iPhone 6 plus。

是好的做法,还是应该做,还是有更好的办法?`

height standards uitableview ios

2
推荐指数
1
解决办法
1201
查看次数

为什么需要在定义时初始化引用变量?

我试着寻找答案,但到目前为止还没有运气.我的问题是 - 为什么引用变量在定义时需要初始化?这是技术原因,还是标准不允许的?

以此代码为例:

int number = 42;
int& numberRef;
numberRef = number;
Run Code Online (Sandbox Code Playgroud)

以上是不允许的,但下面的代码是:

int number = 42;
int& numberRef = number;
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能像未初始化的指针一样处理未初始化的引用变量?这里有什么我想念的吗?

c++ standards initialization reference

2
推荐指数
1
解决办法
293
查看次数

有符号整数和无符号整数之间的转换

如果我将无符号整数转换为有符号整数然后强制转换,我保证得到原始值吗?例如,这是否函数总是返回true任何x任何平台上根据C++标准?

bool f(unsigned int x)
{
    return x == static_cast<unsigned int>(static_cast<int>(x));
}
Run Code Online (Sandbox Code Playgroud)

这个如何?

bool g(int x)
{
    return x == static_cast<int>(static_cast<unsigned int>(x));
}
Run Code Online (Sandbox Code Playgroud)

c++ standards casting unsigned-integer

2
推荐指数
1
解决办法
518
查看次数