欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > C++题目整理

C++题目整理

2025/5/6 23:30:26 来源:https://blog.csdn.net/baiyu33/article/details/143251955  浏览:    关键词:C++题目整理

1. 解释 std::cout << std::endl

Q:执行std::cout << std::endl 时,发生了什么。 std::endl 是变量吗?

A:std::endl 是函数, std::cout << std::endl 看似是 std::cout 调用 std::endl, 但是 operator<<() 函数内部是调用了 std::endl(std::cout).
std::endl() 函数内部,首先打印换行符,然后flush,最后返回 std::ostream 对象。

2. 解释定义函数时包含头文件

Q:当定义一个函数,比如在 foo.cpp 中 int foo() { return 42; } 时,通常还包含了头文件 foo.h; 而 foo.h 中是 extern "C" int foo(); 方式声明的。为什么要写 #include "foo.h"?不写会发生什么?

A: foo.h 中声明了 foo() 函数为 C 修饰的符号, 而在 foo.cpp 中,如果没包含 foo.h, 会导致 foo.cpp 中定义 C++ 修饰的符号。也就是说,是否包含 foo.h, 会导致 foo.cpp -> foo.cpp.o 的转换后得到不同的符号。

foo.h 提供了函数的声明,当编译器看到 foo() 定义时会执行「name lookup」,看到了 extern "C" int foo() 那就是匹配上了, 没看到的话编译器会自行处理为 c++ 修饰的符号。

3. 解释 abs(0.2), ::abs(0.2), std::abs(0.2)

::abs(0.2) 是调用了全局作用域的 abs 函数, 是 C 标准库提供的函数。是执行了 qualified name lookup.
std::abs(0.2) 是从 std 命名空间去查询,是执行了 qualified name lookup。
abs(0.2) 则需要根据情况判断,可能被查询为 ::abs(0.2), 也可能被查询为 std::abs(0.2) (比如先执行了 using namespace std).

4. sizeof(long)sizeof(int) 相等吗? 请在编译期实现计算

不限定编译器。不限定 c++ 标准。
直接背答案不给分。

https://godbolt.org/z/Kc1xnncsK
#include <type_traits>  template <std::size_t N>  
struct PrintSize;  int main() {  PrintSize<sizeof(long)> p1;PrintSize<sizeof(int)> p2;return 0;  
}  

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词