繁体   English   中英

为什么 CLion (cmake) 不需要包含<string> VS 什么时候建?</string>

[英]Why CLion (cmake) doesn't require include <string> to build when VS does?

为什么以下代码使用 CLion 构建没有问题,但使用 Visual Studio 失败?

#include <iostream>

using namespace std;

int main() {
    string str;
    cout << "Enter your name:" << endl;
    cin >> str;

    getchar();

    return 0;
}

为了使它与 Visual Studio 一起工作,我必须添加

#include <string>

两者都使用 C++ (2003) 的过时版本进行构建,这是一项要求。 这是我的 CLion 的 CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(foo)

set(CMAKE_CXX_FLAGS "--std=c++03")

set(SOURCE_FILES main.cpp)
add_executable(foo ${SOURCE_FILES})

它是 CLion 中的配置吗? 它在 CMake 中吗?

它是 CLion 中的配置吗? 它在 CMake 中吗? 两者都不。 它是编译器之间的差异。

- drescherjm

允许但不要求标准标头包含其他标准标头。 不同的实现有不同的包含链。 依赖特定的依赖项使您的代码不可移植:远离为您使用的标准库的每个元素都包含适当的标准 header。

- 伊戈尔·坦德尼克

有没有办法强制它? 如果这些包含丢失,又使构建失败?

您可以尝试使用Include What You Use ,但我不确定它是否可以检查这一点。 引用自述文件:

“包含您使用的内容”的意思是:对于您在 foo.cc(或 foo.cpp)中使用的每个符号(类型、function、变量或宏),foo.cc 或 foo.h 都应包含导出的 ah 文件该符号的声明。 (类似地,对于 foo_test.cc,foo_test.cc 或 foo.h 都应该包含。)显然 foo.cc 本身中定义的符号被排除在此要求之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM