小编Byr*_*onB的帖子

从 double 转换到 size_t 会产生错误的结果?

以下代码有效。我的问题是,应该 2) 不会导致非常接近 1) 的结果吗?为什么 2) 投到这么小的数量?因此,也许值得注意的是 2) 正好是 1) 的一半:

std::cout << "1)  " << std::pow(2, 8 * sizeof(size_t)) << std::endl;
std::cout << "2)  " << static_cast<size_t>(std::pow(2, 8 * sizeof(size_t))) << std::endl; 
Run Code Online (Sandbox Code Playgroud)

输出是:

  1. 18446744073709551616
  2. 9223372036854775808

c++ type-conversion c++20

4
推荐指数
1
解决办法
155
查看次数

不抛出 std::out_of_range 异常

   // The following code works fine, throwing a std::out_of_range exception:
    
    std::vector<double> vd{ 1.5 };
    
        try {
            int i{ -1 };
            double d = vd.at(i); // exception is thrown
        }
        catch (std::out_of_range& re) {
            std::cout << "Exception is " << re.what() << std::endl; // invalid vector subscript
        }

     
Run Code Online (Sandbox Code Playgroud)

如果我使用无效索引访问 for 循环中的向量元素,std::exception尽管我使用.at(). 为什么std::out_of_range不抛出异常?

// in a for loop, this does not throw the exception!

std::vector<double> vd{ 1.5 };

    try {
        for (int i = -1; i …
Run Code Online (Sandbox Code Playgroud)

c++ exception std stdvector

3
推荐指数
1
解决办法
116
查看次数

标签 统计

c++ ×2

c++20 ×1

exception ×1

std ×1

stdvector ×1

type-conversion ×1